将自定义格式化的JSON数据转换为dijit.form.FilteringSelect时遇到一些问题。对于其他类型的dijit选择框,这可能是相同的。
更新: 使用FilteringSelect而不是ComboBox的一个区别是验证错误 ar现在显示在元素上。所有输入都返回“无效值”工具提示。
以下是一些示例JSON,它是从数据库通过PHP转换而来的 结果数组:
{"animals":[
{"gr_id":"1","gr_name":"Dog","gr_description":null},
{"gr_id":"4","gr_name":"Cat","gr_description":null}]}
以下是用于显示组合框和定义商店的HTML代码:
<div dojoType="dojox.data.QueryReadStore" url="getAnimals.php" jsId="animalStore">
</div>
<select dojoType="dijit.form.FilteringSelect" store="animalStore" searchAttr="gr_name">
</select>
正确处理搜索属性,并将上述响应发送回客户端,但该框仍为空。
我不知道如何将自定义JSON响应映射到标签(显示为选项并用于搜索的值:gr_name)和值(在submit:gr_id上返回的值)dijit选择框(FilteringSelect)的位置。 / p>
当我一直在搜索示例时,它似乎总是像魔术一样工作,但我猜这是因为它们使用json数据的默认结构。我甚至无法证实这一点,因为这些功能的文档有点稀疏。
答案 0 :(得分:1)
只需扩展QueryReadStore并更改实现以匹配您的后端。有关如何执行此操作的示例,请查看dojox / data下的各个商店(http://trac.dojotoolkit.org/browser/tags/release-1.5.0/dojox/data)。
如果不了解更多关于后端的信息,很难更具体。但是如果你看一下flickr商店或映射到预先存在的非道场数据源的任何其他商店,你就会明白这一点。
答案 1 :(得分:0)
我还没有找到我想要的溶剂,但我至少有一个解决方法。 似乎JSON需要以特定的格式提供,以便由dijit.form.FilteringSelect(或相关的框)处理
数组需要被称为“items”,标识符和标签的名称需要与响应JSON一起提供:
{identifier: "gr_id",
label: "gr_name",
items: [{"gr_id":"1", "gr_name":"Cat","gr_description":null}]}
由于我正在寻找一种方法来使服务器端代码独立于视图溶解,这不是我最喜欢的解决方案......