Dojo FilteringSelect避免ajax调用onload

时间:2017-11-27 21:50:14

标签: dojo

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

2 个答案:

答案 0 :(得分:0)

如果您已有数据,那么您需要做的就是创建商店并将其与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();

答案 1 :(得分:0)

我有很多情况我可以为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