dojo.data é indefinido Flitering seleccionar
-
10-07-2019 - |
Pergunta
Eu estou tendo alguns problemas com Dojo filtragem Seleciona quando utilizar os formulários do Zend Framework e precisa de alguma ajuda para descobrir o que eu perdi, pois isso está me deixando louco.
Atualmente, estou recebendo este erro no firebug :
- dojo.data é indefinido
- dojo.data.ItemFileReadStore não é um construtor
Abaixo está o código que estou usando para criar o filtro selecionar e fornecer os dados JSON para o controlador chamando.
Zend_Form Elemento (Dojo Ativado)
$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 Controlador
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();
}
A coisa irritante é todos os meus outros elementos Dojo neste formulário e outras formas funcionam bem, é apenas sempre que eu faço Filtragem Selects que eu bati esses problemas, e este problema faz com que todos os outros elementos de forma a falhar também.
Agradecemos antecipadamente.
Solução
O problema é realmente com a forma como Zend Framework inicializa os dijits e armazena os dados antes do kit de ferramentas é totalmente carregado, neste caso, especificamente, os métodos de atribuição a loja para o dijit. Corri para este problema também e encontrou a melhor maneira de trabalhar em torno das questões era quer passar o armazenamento de dados a partir do controlador para uma variável JavaScript definido na vista ou fazer o que seu fez com uma ação específica autocomplete. Com base no seu exemplo que gostaria de fazer as seguintes alterações.
Em seu formulário I simplificaria o elemento:
$industry = new Zend_Dojo_Form_Element_FilteringSelect('industry');
$industry->setAutocomplete(true)
->setRequired(true)
->removeDecorator('DtDdWrapper')
->removeDecorator('label')
->removeDecorator('HtmlTag');
Na sua opinião qual deseja se conectar à loja para o seu dijit e certifique-se de que você tenha carregado o módulo 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');
?>
Como mencionei eu tive um problema semelhante que eu respondi aqui . Outra questão que eu descobri é que o armazenamento de dados não gosta de lidar com rótulos declarou algo diferente de "nome" para a declaração etiqueta no Zend_Dojo_Data.