dojo.data не определено - PullRequest
0 голосов
/ 08 мая 2009

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

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

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

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

Элемент Zend_Form (Додзе включено)

$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 в этой форме и другие формы работают хорошо, просто всякий раз, когда я делаю Filtering Select, я сталкиваюсь с этими проблемами, и эта проблема также приводит к сбою всех других элементов в форме.

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

1 Ответ

0 голосов
/ 21 мая 2009

Проблема на самом деле в том, как 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» для объявления меток.

...