【发布时间】:2017-11-27 21:50:13
【问题描述】:
有没有办法实例化 FilteringSelect 而不让它对服务器进行 ajax 调用?我拥有当前选定对象的页面加载所需的所有信息,必须再次调用服务器以使用我已经拥有的数据填充 FilteringSelect 是没有意义的。理想情况下,我想用一个对象而不是 id 来实例化 FilteringSelect。
【问题讨论】:
标签: dojo
有没有办法实例化 FilteringSelect 而不让它对服务器进行 ajax 调用?我拥有当前选定对象的页面加载所需的所有信息,必须再次调用服务器以使用我已经拥有的数据填充 FilteringSelect 是没有意义的。理想情况下,我想用一个对象而不是 id 来实例化 FilteringSelect。
【问题讨论】:
标签: dojo
在很多情况下,我有可供 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
【讨论】:
如果您已经有数据,那么您需要做的就是创建一个商店并将其与 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();
【讨论】: