Проблема на самом деле в том, как Zend Framework инициализирует dijits и хранилища данных до полной загрузки инструментария, в данном случае, в частности, методов, назначающих хранилище dijit. Я также столкнулся с этой проблемой и обнаружил, что лучший способ обойти эти проблемы - передать хранилище данных из контроллера в переменную JavaScript, определенную в представлении, или сделать то, что вы сделали, с помощью определенного действия автозаполнения. На основании вашего примера я бы внес следующие изменения.
В вашей форме я бы упростил элемент:
$industry = new Zend_Dojo_Form_Element_FilteringSelect('industry');
$industry->setAutocomplete(true)
->setRequired(true)
->removeDecorator('DtDdWrapper')
->removeDecorator('label')
->removeDecorator('HtmlTag');
По вашему мнению, вы хотите подключить хранилище к вашему dijit и убедиться, что вы загрузили модуль dojo.data.ItemFileReadStore:
<?php $this->dojo()->onLoadCaptureStart()?>
function(){
dijit.byId('industry').store = new dojo.data.ItemFileReadStore({ url: '/controller/industry' });
}
<?php
$this->dojo()->onLoadCaptureEnd();
$this->dojo()->requireModule('dojo.data.ItemFileReadStore');
?>
Как я уже упоминал, я столкнулся с аналогичной проблемой, на которую я ответил здесь . Еще одна проблема, которую я обнаружил, заключается в том, что хранилище данных не любит иметь дело с метками, объявленными в объявлении Zend_Dojo_Data, кроме «name» для объявления меток.