我已成功设置FilteringSelect,使用JsonRest存储动态查询服务器的项目。我的问题是当我尝试初始设置具有特定值的下拉列表时。
<div id="ddThings"></div> <script type="text/javascript"> dojo.ready(function () { var storeThings = new dojo.store.JsonRest({ target: "/Things/" }); var ddThings = new dijit.form.FilteringSelect({ name: "thingId", searchAttr: "name", autoComplete: true, value: "5", missingMessage: "This is required", placeHolder: "Select a Thing", store: dojo.data.ObjectStore({ objectStore: storeThings }) }, "ddThings"); ddThings.startup(); //ddThings.set("value", "5"); });
当我将值设置为“5”或使用ddThings.set时,我可以看到filteringselect查询我的服务器并传入“id”值。我返回一个包含单个项目的东西的集合。我希望它用我返回的项目填充过滤选项。但是,没有任何反应。
返回的JSON看起来像这样
[ { "id":"5", "name":"Example" } ]
一个有趣的注意事项是,如果我将“displayedValue”设置为“Example”(无论名称是什么),那么我可以看到它到达服务器,找到匹配并返回它,它实际上填充了匹配项目的下拉列表。我想要这种行为,但是使用项目的值/ id,而不是它的显示/名称。
答案 0 :(得分:2)
当JsonRest Store通过其id发出特定项目的请求时,响应必须是单个项目而不是集合。
{ "id":"5", "name":"Example" }
答案 1 :(得分:1)
dijit.form.FilteringSelect store期待一个看起来像这样的JSON对象。
{ "identifier":"id"
, "label":"name"
, "items":
[
{"id":"9","name":"Alberta"}
, {"id":"4","name":"New Brunswick"}
, {"id":"11","name":"Northwest Territories"}
]
}
商店必须实现dojo.data.api.Identity
http://dojotoolkit.org/reference-guide/dojo/data/api/Identity.html#dojo-data-api-identity
来自Dojo文档:
注意:将DataStore与FilteringSelect一起使用时,商店必须这样做 实现Identity API。
答案 2 :(得分:0)
您可以将dojo.store.DataStore用作适配器,而所有小部件尚未更新到新的dojo store api。