Dojo FilteringSelect 避免 ajax 调用 onload

Dojo FilteringSelect avoid ajax call onload

有没有办法实例化 FilteringSelect 而无需对服务器进行 ajax 调用?我拥有当前所选对象的页面加载所需的所有信息,必须再次调用服务器以使用我已有的数据填充 FilteringSelect 是没有意义的。理想情况下,我想用一个对象而不是 id 来实例化 FilteringSelect。

如果您已经有数据,那么您需要做的就是创建一个商店并将其与 FilteringSelect

一起使用

例如:您可以像这样创建一个商店

var stateStore = new dojo.store.Memory({
        data: [
            {name:"Alabama", id:"AL", timeStamp:"1211753600"},
            {name:"Alaska", id:"AK", timeStamp:"1211753601"},
            {name:"American Samoa", id:"AS", timeStamp:"1211753602"},
            {name:"Arizona", id:"AZ", timeStamp:"1211753603"},
            {name:"Arkansas", id:"AR", timeStamp:"1211753604"},
            {name:"Armed Forces Europe", id:"AE", timeStamp:"1211753605"},
            {name:"Armed Forces Pacific", id:"AP", timeStamp:"1211753606"},
            {name:"Armed Forces the Americas", id:"AA", timeStamp:"1211753607"},
            {name:"California", id:"CA", timeStamp:"1211753608"},
            {name:"Colorado", id:"CO", timeStamp:"1211753609"},
            {name:"Connecticut", id:"CT", timeStamp:"1211753610"},
            {name:"Delaware", id:"DE", timeStamp:"1211753611"}
        ], idProperty: "timeStamp"
    });

然后将商店分配给 FilteringSelect

 var filteringSelect = new FilteringSelect({
        id: "stateSelect",
        name: "state",
        store: stateStore,
        searchAttr: "name"

    }, "stateSelect").startup();

在很多情况下,我有 FilteringSelect 可用的当前值,但不是完整存储,并且像你一样,我进行了所有这些无用的 ajax 调用来获取我已经拥有的数据。

问题是 FilteringSelect 的 set 方法调用 FilteringSelect 的 store.get() 函数,在 dojo/store/JsonRest 的情况下(我假设您使用的是它)总是发出 ajax打电话。

在我的例子中,我最终得到了我自己的 JsonRest 版本,它修改了 get 方法以在数据已经可用时绕过 ajax 调用,这解决了问题。

我现在想不出另一个可行的解决方案。

在下面找到应该有帮助的扩展 JsonRest 模板(虽然没有测试):

define(["dojo/_base/declare", "dojo/store/JsonRest"], function(declare, JsonRest){
  return declare(JsonRest, {
    get: function(id, options){
        if (<name for id is known>){
            return <name for id>;
        }else{
            return this.inherited(arguments);
        }
  });
});

jc