Javascript 如何使用JsonRest存储设置Dojo FilteringSelect的默认值

Javascript 如何使用JsonRest存储设置Dojo FilteringSelect的默认值,javascript,json,dojo,Javascript,Json,Dojo,我已经成功地设置了FilteringSelect,以便使用JsonRest存储动态查询服务器上的项目。我的问题是,当我尝试最初用特定值设置下拉列表时 <div id="ddThings"></div> <script type="text/javascript"> dojo.ready(function () { var storeThings = new dojo.store.JsonRest({ target: "/Things/"

我已经成功地设置了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"); }); <div id=“ddThings”></div> <script type=“text/javascript”> dojo.ready(函数(){ var storeThings=new dojo.store.JsonRest({target:“/Things/”}); var ddThings=new dijit.form.FilteringSelect({ 名称:“thingId”, searchAttr:“名称”, 自动完成:正确, 值:“5”, missingMessage:“这是必需的”, 占位符:“选择一件事”, store:dojo.data.ObjectStore({ObjectStore:storeThings}) }“ddThings”); ddThings.startup(); //ddThings.set(“值”、“5”); }); 当我将值设置为“5”或使用ddThings.set时,我可以看到filteringselect查询我的服务器并传递“id”值。我返回一个包含单个项目的集合。我希望它用我返回的项目填充filteringselect。但是,什么也没有发生

返回的JSON如下所示

[ { "id":"5", "name":"Example" } ] [ { “id”:“5”, “名称”:“示例” } ]
一个有趣的注意事项是,如果我将“displayedValue”设置为“Example”(无论名称是什么),那么我可以看到它进入服务器,找到一个匹配项并返回它,它实际上用匹配项填充下拉列表。我需要此行为,但使用的是项的值/id,而不是项的显示/名称。

dijit.form.FilteringSelect存储区需要一个类似于此的JSON对象

{ "identifier":"id"
, "label":"name"
, "items":
    [
        {"id":"9","name":"Alberta"}
      , {"id":"4","name":"New Brunswick"}
      , {"id":"11","name":"Northwest Territories"}
    ]
}
存储必须实现dojo.data.api.Identity

从Dojo文档中:

注意:当将数据存储与FilteringSelect一起使用时,存储必须 实现身份API


dijit.form.FilteringSelect存储区需要一个如下所示的JSON对象

{ "identifier":"id"
, "label":"name"
, "items":
    [
        {"id":"9","name":"Alberta"}
      , {"id":"4","name":"New Brunswick"}
      , {"id":"11","name":"Northwest Territories"}
    ]
}
存储必须实现dojo.data.api.Identity

从Dojo文档中:

注意:当将数据存储与FilteringSelect一起使用时,存储必须 实现身份API


您可以使用dojo.store.DataStore作为适配器,而所有小部件尚未更新为新的dojo store api


请参见

您可以使用dojo.store.DataStore作为适配器,而所有小部件尚未更新为新的dojo store api


请参见

当JsonRest存储通过其id请求特定项时,响应必须是单个项而不是集合

{ "id":"5", "name":"Example" } { “id”:“5”, “名称”:“示例” }
当JsonRest存储通过其id请求特定项时,响应必须是单个项而不是集合

{ "id":"5", "name":"Example" } { “id”:“5”, “名称”:“示例” }
问题是所有其他功能都正常工作。只有默认值的设置被破坏。是的,我以前见过这种数据结构。问题是JsonRest存储不是这样工作的。如果我只是以那种格式返回数据,那么它就不起作用了。问题一定是dojo.data.ObjectStore,它只是旧数据存储技术和新对象存储之间的适配器。所以,现在我需要了解如何配置对象存储以使其正常工作。您如何知道所有其他功能都正常工作?当您单击FilteringSelect时,是否看到存储区中的所有值?如果无法设置该值,可能是因为在存储中找不到该值,并且FilteringSelect不允许您设置存储中没有的值。我通常将
dojox.data.QueryReadStore
dijit.form.FilteringSelect
一起使用,因为我实际上不需要在FilteringSelect中放置/发布/删除任何内容。是的,键入、搜索和单击下拉列表会导致执行查询并点击我的服务器并填充它。值得一提的是,当我使用QueryReadStore时,我确实让一切都正常工作(包括默认设置)。我只是希望开始远离dojo.data,因为我觉得它们正在慢慢被弃用。我现在就把这个作为答案。获得完整功能的唯一方法似乎是使用QueryReadStore。谢谢我不知道为什么这个答案被接受,因为它在技术上是不正确的。预期的格式由商店而不是小部件决定。答案中发布的格式仅适用于
dojo.data.ItemFileReadStore
dojo.data.ItemFileWriteStore
,和(有细微区别)
dojox.data.QueryReadStore
。是的,但解决方案是基本上不使用JsonRest存储,因为它与FilteringSelect有问题。我将其标记为答案,因为现在看来您必须使用QueryReadStore才能获得完整的功能。问题是所有其他功能都工作正常。只有默认值的设置被破坏。是的,我以前见过这种数据结构。问题是JsonRest存储不是这样工作的。如果我只是以那种格式返回数据,那么它就不起作用了。问题一定是dojo.data.ObjectStore,它只是旧数据存储技术和新对象存储之间的适配器。所以,现在我需要了解如何配置对象存储以使其正常工作。您如何知道所有其他功能都正常工作?当您单击FilteringSelect时,是否看到存储区中的所有值?如果无法设置该值,可能是因为在存储中找不到该值,并且FilteringSelect不允许您设置存储中没有的值。我通常将
dojox.data.QueryReadStore
dijit.form.FilteringSelect
一起使用,因为我实际上不需要在FilteringSelect中放置/发布/删除任何内容。是的,键入、搜索和单击下拉列表会导致执行查询并点击我的服务器并填充它。值得一提的是,当我使用Q时,我确实让一切都正常工作(包括默认设置)