我在使用Zend Framework Forms时遇到一些Dojo Filtering选择问题并需要一些帮助来找出我错过的内容,因为这让我很生气。
我目前在 firebug :
中收到此错误下面是我用来创建过滤器选择并将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元素和其他表单都运行良好只是每当我进行Filtering选择我遇到这些问题时,这个问题导致表单中的所有其他元素也失败。 / p>
提前致谢。
答案 0 :(得分:0)
问题实际上是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');
?>
正如我所提到的,我遇到了类似的问题,我回答here。我发现的另一个问题是数据存储不喜欢处理Zend_Dojo_Data中标签声明声明除“name”之外的标签。