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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top