我正在创建一个内存存储,如下所示
var someData = [
{id:1, name:"One"},
{id:2, name:"Two"}
];
store = new Memory({
data: someData,
id:”userStore”
});我想知道是否有一种方法可以查询内存存储来根据id返回存储实例。喜欢
var storePresent = Memory.getById(“userStore”) 类似于
dijit.registry.byId(); ,它返回id指定的dijit实例。
发布于 2014-06-20 05:08:10
据我所知,没有您所描述的存储注册表。您需要自己在应用程序的控制器代码中对此进行编码。
商店是一个简单的对象。
您可以:
这个规则的唯一例外是如果你已经使用dojox/app作为你的控制层。它有一些命名的存储能力。如果不是,我不建议使用重构。
发布于 2014-06-30 17:10:31
模块dojo/store/Memory中没有内存存储的内置静态存储库。如果你需要这样的东西,最简单的方法是编写内存存储的自定义工厂,它将保存对所有创建的存储的静态引用:
define(["dojo/store/Memory"], function(Memory){
var repository = {}
return {
getStore: function(id) {
return repository[id]
},
createStore: function(id, params) {
var memory = new Memory(params)
repository[id] = memory
return memory
}
}
});用法:
require(["modules/MemoryRepository"], function(MemoryRepository) {
MemoryRepository.createStore("userStore", {data: someData})
...
var userStore = MemoryRepository.getStore("userStore")
})如果你要按需创建很多商店,你也应该考虑注销它们(从工厂中删除引用)。内存问题可能是没有提供开箱即用的东西的原因。
发布于 2014-06-30 18:48:01
正如其他回答者所说,商店没有特定的存储库或注册表。但是,通过使用dijit/registry::add()函数,也可以使用dijit/registry来存储引用,例如:
// Add to registry
registry.add(new Memory({
id: "userStore",
data: [{
name: "Smith",
firstname: "John"
}, {
name: "Doe",
firstname: "John"
}]
}));然后,您可以使用dijit/registry::byId()函数来检索它,例如:
// Query the store by using the registry
var person = registry.byId("userStore").query({
firstname: "John"
}).forEach(function(person) {
console.log(person.firstname + " " + person.name);
});完整的例子可以在JSFiddle上找到:http://jsfiddle.net/mn94f/
https://stackoverflow.com/questions/24315982
复制相似问题