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