dojo.data не определено Flitering select

У меня есть несколько проблем с Dojo Filtering Selects при использовании Zend Framework Forms, и мне нужна помощь, чтобы выяснить, что я пропустил, поскольку это сводит меня с ума.

В настоящее время я получаю следующие ошибки в firebug:

  • dojo.data не определен
  • dojo.data.ItemFileReadStore не является конструктором

Ниже приведен код, который я использую для создания выбора фильтра и предоставления данных json вызывающему контроллеру.

Элемент Zend_Form (включен Dojo)

$industry = new Zend_Dojo_Form_Element_FilteringSelect('industry');
    $industry->setAutocomplete(true)
    ->setStoreId('industrystore')
    ->setStoreType('dojo.data.ItemFileReadStore')
    ->setStoreParams(array('url' => $baseUrl.'/dojo/industry'))
    ->setAttrib("searchAttr", "title")
    ->setRequired(true)
    ->removeDecorator('DtDdWrapper')
    ->removeDecorator('label')
    ->removeDecorator('HtmlTag');

Контроллер Dojo

public function industryAction(){

    $db = Zend_Db::factory($this->config->database);

    $result = $db->fetchAll("SELECT * FROM industries");
    $data = new Zend_Dojo_Data('industryid', $result);
    $this->_helper->autoCompleteDojo($data);

    $db->closeConnection();
}

Раздражает то, что все остальные элементы Dojo в этой форме и другие формы работают хорошо, просто всякий раз, когда я выполняю фильтрацию выборок, я сталкиваюсь с этими проблемами, и эта проблема вызывает сбой всех других элементов в форме.

Заранее спасибо.


person Grant Collins    schedule 07.05.2009    source источник


Ответы (1)


Проблема на самом деле заключается в том, как 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');
?>

Как я уже упоминал, у меня возникла аналогичная проблема, на которую я ответил здесь. Еще одна проблема, которую я обнаружил, заключается в том, что хранилище данных не любит иметь дело с метками, объявленными чем-либо, кроме «name» для объявления метки в Zend_Dojo_Data.

person Erik    schedule 21.05.2009