【问题标题】:Dojo FilteringSelect avoid ajax call onloadDojo FilteringSelect 避免 ajax 调用 onload
【发布时间】:2017-11-27 21:50:13
【问题描述】:

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

【问题讨论】:

    标签: dojo


    【解决方案1】:

    在很多情况下,我有可供 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

    【讨论】:

    • 听起来我也必须扩展 JsonRest。如果您有可以共享的代码,我将不胜感激。谢谢!
    • 我编辑了我的答案,为扩展的 JsonRest 添加了一个模板,它应该可以帮助您获得所需的内容
    【解决方案2】:

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

    然后将 store 分配给 FilteringSelect

     var filteringSelect = new FilteringSelect({
            id: "stateSelect",
            name: "state",
            store: stateStore,
            searchAttr: "name"
    
        }, "stateSelect").startup();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多