如何使用JsonRest Store设置Dojo FilteringSelect的默认值

时间:2011-11-15 18:26:31

标签: javascript json dojo

我已成功设置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,而不是它的显示/名称。

3 个答案:

答案 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。

http://livedocs.dojotoolkit.org/dijit/form/FilteringSelect

答案 2 :(得分:0)

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

请参阅http://livedocs.dojotoolkit.org/dojo/store/DataStore