【问题标题】:How do I set the default value for a Dojo FilteringSelect using a JsonRest Store如何使用 JsonRest 存储设置 Dojo FilteringSelect 的默认值
【发布时间】:2011-12-29 18:48:27
【问题描述】:

我已成功设置我的 FilteringSelect 以使用 JsonRest 存储动态查询我的服务器以获取项目。我的问题是当我尝试初始设置具有特定值的下拉列表时。

&ltdiv id="ddThings"&gt&lt/div&gt &ltscript type="文本/javascript"&gt dojo.ready(function () { var storeThings = new dojo.store.JsonRest({ target: "/Things/" }); var ddThings = new dijit.form.FilteringSelect({ 名称:“事物标识”, searchAttr: "名称", 自动完成:真, 值:“5”, missingMessage: "这是必需的", placeHolder: "选择一个东西", 商店:dojo.data.ObjectStore({ objectStore:storeThings }) }, "ddThings"); ddThings.startup(); //ddThings.set("值", "5"); });

当我将值设置为“5”或使用 ddThings.set 时,我可以看到过滤选择查询我的服务器并传入一个“id”值。我返回一个包含单个项目的东西集合。我希望它用我返回的项目填充过滤选择。但是,什么都没有发生。

返回的 JSON 如下所示

[ { "id":"5", “名称”:“示例” } ]

一个有趣的提示是,如果我将“displayedValue”设置为“Example”(无论名称是什么),那么我可以看到它到达服务器,找到匹配项并将其返回,它实际上会使用匹配项填充下拉列表。我想要这种行为,但使用项目的值/ID,而不是它的显示/名称。

【问题讨论】:

  • 我对@9​​87654321@ 不是很熟悉,它的期望不一定有据可查,但我敢打赌,它不会期望对特定 ID 的查询返回一个数组.你试过只返回一个对象吗?
  • 肯,你真是个天才!就是这样!我从没想过要返回单个实体,因为通常我将 JsonRest 存储与始终需要集合的 Grid 一起使用。我会给你机会把它写下来作为获得荣誉的答案。

标签: javascript json dojo


【解决方案1】:

当 JsonRest Store 通过其 id 对特定项目发出请求时,响应必须是单个项目而不是集合。

{ "id":"5", “名称”:“示例” }

【讨论】:

    【解决方案2】:

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

    http://livedocs.dojotoolkit.org/dojo/store/DataStore

    【讨论】:

      【解决方案3】:

      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

      http://dojotoolkit.org/reference-guide/dojo/data/api/Identity.html#dojo-data-api-identity

      来自 Dojo 文档:

      注意:当使用具有 FilteringSelect 的 DataStore 时,存储必须 实现身份 API。

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

      【讨论】:

      • 问题是所有其他功能都运行良好。只有默认值的设置被破坏。是的,我以前见过这种数据结构。问题是 JsonRest 商店不是这样工作的。如果我只是以该格式返回数据,那么它不起作用。那么问题肯定出在 dojo.data.ObjectStore 上,它只是旧数据存储技术和新对象存储之间的一个适配器。所以,现在我需要了解如何配置对象存储以使其正常运行。
      • 如何知道所有其他功能都正常工作?当您单击 FilteringSelect 时,您是否看到商店中的所有值?如果您无法设置该值,可能是因为在商店中未找到该值,并且 FilteringSelect 不允许您设置不在商店中的值。我通常使用dojox.data.QueryReadStoredijit.form.FilteringSelect,因为我真的不需要在FilteringSelect 中放置/发布/删除任何内容。
      • 是的,键入、搜索和单击下拉列表会导致执行查询并访问我的服务器并填充它。值得一提的是,当我使用 QueryReadStore 时,我确实让一切正常(包括默认设置)。我只是希望开始远离 dojo.data,因为我的印象是它们正在慢慢被弃用。我暂时将其标记为答案。似乎获得完整功能的唯一方法是使用 QueryReadStore。谢谢
      • 我不确定为什么这个答案被接受,因为它在技术上是不正确的。预期的格式由商店决定,而不是小部件。答案中发布的格式仅适用于dojo.data.ItemFileReadStoredojo.data.ItemFileWriteStore 和(略有不同)dojox.data.QueryReadStore
      • 是的,但解决方案是基本上不使用 JsonRest 存储,因为它显然与 FilteringSelect 存在问题。我将其标记为答案,因为目前看来您必须使用 QueryReadStore 才能获得全部功能。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-09
      相关资源
      最近更新 更多