2009-04-15 3 views
2

Ich versuche, ein onChange Ereignis von einem FilteringSelect zu binden, um ein anderes FilteringSelect aufzufüllen.Füllen eines FilteringSelect-Datenspeichers aus einem onChange-Ereignis

// View 
dojo.addOnLoad(function() { 
    dojo.connect(dijit.byId('filterselect1'), 'onChange', function() { 
     dijit.byId('filterselect2').store = new dojo.data.ItemFileReadStore(
      { url: "/test/autocomplete/id/" + dijit.byId("filterselect1").value } 
     ); 
    }); 
}); 

Die JSON erzeugt von dem, was ich einen autoCompleteDojo Helfer mit korrekt von einem Zend Action Controller berichten.

// Action Controller 
public function autocompleteAction() 
{ 
    $id = $this->getRequest()->getParam('id'); 
    $select = $this->_table->select() 
          ->from($this->_table, array('id','description')) 
          ->where('id=?',$id); 

    $data = new Zend_Dojo_Data('id', $this->_table->fetchAll($select)->toArray(), 'description'); 

    $this->_helper->autoCompleteDojo($data); 
} 

Ich erhalte die JSON vom Remote-Datenspeicher richtig, aber es nicht die zweite FilteringSelect bevölkern. Gibt es noch etwas, was ich tun muss, um den JSON auf die FilteringSelect zu schieben?

Antwort

3

Ich konnte nicht glauben, dass dies war das Problem verursacht, aber das ganze Problem gekocht auf die Tatsache, dass es scheint, dass ein Dojo ItemFileReadStore BRAUCHT die Label-Eigenschaft des JSON „name“ zu sein. Am Ende war das alles, was man brauchte, um sie miteinander zu verbinden.

dojo.addOnLoad(function() { 

    dijit.byId('filtering_select_2').store = new dojo.data.ItemFileReadStore({url: '/site/url'}); 

    dojo.connect(dijit.byId('filtering_select_1'), 'onChange', function (val) { 
     dijit.byId('filtering_select_2').query.property_1 = val || "*"; 
    }); 
}); 

UPDATE: Die Eigenschaft innerhalb Zend Form als der ZF fixiert wurde 1.8.4

+8

Eigentlich müssen Sie nur das searchAttr auf das Steuerelement setzen, damit es funktioniert. Sie können es entweder dem HTML (searchAttr = "description") oder dem JS (filteringSelect2.searchAttr = "description") hinzufügen. –

+0

Sie sollten diesen Kommentar wirklich zu einer Antwort machen, da er jetzt wirklich einen hohen Stellenwert für die Frage hat und ich würde ihm gerne eine höhere Stimme geben. – Erik

1

Versuchen Sie console.log() im Ereignis, um zu sehen, ob es gestartet wird. Das Ändern des Speichers sollte funktionieren, für andere Widgets wie das Grid müssen Sie jedoch auch Auffrischungsmethoden aufrufen.

+0

Eine ungerade Effekt; Das Ereignis onChange wird ausgelöst, aber der Aufruf des fernen Datenspeichers findet erst statt, wenn das fileseletc2 über ein Ereignis wie onClick oder keydown aktiviert wurde. – Erik

Verwandte Themen