2009-04-15 3 views
2

FilteringSelectonChange 이벤트를 바인드하여 다른 FilteringSelect을 채우려고합니다.onChange 이벤트에서 FilteringSelect 데이터 저장소 채우기

// 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 } 
     ); 
    }); 
}); 

json으로는 내가 autoCompleteDojo 도우미를 사용하여 젠드 액션 컨트롤러에서 정확히 무엇을 말할 수에서 생성됩니다.

// 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); 
} 

내가 올바르게 원격 데이터 저장소에서 JSON을받을 수 있지만, 두 번째 FilteringSelect을 채우지 않습니다. FilteringSelect에 JSON을 푸시하는 데 필요한 다른 방법이 있습니까?

답변

3

나는 이것이 문제를 일으킨다 고 믿을 수는 없지만 전체 문제는 도장처럼 보일 뿐이다. ItemFileReadStore "name"인 JSON의 label 속성이 필요하다. 결국이 둘을 연결하는 데 필요한 모든 것입니다.

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 : 젠드 양식 내의 재산권 ZF 1.8.4

+8

실제로, 컨트롤에 searchAttr을 설정하면됩니다. HTML (searchAttr = "description") 또는 JS (filteringSelect2.searchAttr = "description")에 추가 할 수 있습니다. –

+0

정말로이 질문에 대한 중요한 가치가 있으므로이 주석을 대답으로 만들어야합니다. 그리고 나는 그것을 높이 평가하고 싶습니다. – Erik

1

이벤트가 발생하면 console.log()를 실행하여 실행되는지 확인하십시오. 상점 변경은 그리드와 같은 다른 위젯의 경우 상쾌한 메소드를 호출해야하지만 작동해야합니다.

+0

홀수 효과에 따라 고정되어있다; onChange 이벤트는 발생하지만 filterseletc2가 onClick 또는 keydown과 같은 이벤트를 통해 활성화 될 때까지 원격 데이터 저장소 호출은 발생하지 않습니다. – Erik

관련 문제