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
有没有办法实例化 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