2009-04-15 2 views
2

Я пытаюсь связать событие onChange одного FilteringSelect для заполнения другого FilteringSelect.Заполнение фильтрацииВыберите хранилище данных из события onChange

// 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 генерируется из того, что я могу правильно сказать от контроллера действий Zend с помощью 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. Есть ли что-то еще, что мне нужно сделать, чтобы нажать JSON на FilteringSelect?

ответ

3

Я не мог поверить, что это вызывает проблему, но весь вопрос сводится к тому, что кажется, что додзё ItemFileReadStore ТРЕБУЕТ свойство метки в формате JSON, чтобы быть «имя». В конце концов, это все, что требуется для их соединения.

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 || "*"; 
    }); 
}); 

ОБНОВЛЕНИЕ: Свойство внутри Zend формы было зафиксировано от ZF 1.8.4

+8

На самом деле все, что вам нужно сделать, это установить для поиска элемент поиска в элементе управления, чтобы он работал. Вы можете добавить его в HTML (searchAttr = "description") или в JS (filteringSelect2.searchAttr = "description"). –

+0

Вы действительно должны ответить на этот комментарий, поскольку он действительно имеет большое значение для вопроса сейчас, и я бы хотел дать ему голосование. – Erik

1

Попробуйте console.log(), чтобы узнать, запущен ли он. Изменение магазина должно работать, однако для других виджетов, таких как сетка, вы также можете вызвать методы обновления.

+0

Нечетного эффект; событие onChange срабатывает, но вызов удаленного хранилища данных происходит не до тех пор, пока filtereletc2 не активируется через какое-либо событие, например onClick или keydown. – Erik

Смежные вопросы