我正在创建一个内存存储
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实例答案 0 :(得分:0)
据我所知,您所描述的并没有商店注册表。您需要在应用程序的控制器代码中自己编写代码。
商店是一个简单的对象。
你可以:
此规则的唯一例外是,如果您已经使用dojox / app作为控制器层。这有一些命名的商店能力。如果没有,我会不建议重构使用它。
答案 1 :(得分:0)
模块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")
})
如果您要按需创建大量商店,您应该考虑取消注册它们(从工厂中删除引用)。内存问题可能是这样的事情没有提供开箱即用的原因。
答案 2 :(得分:0)
与已经说过的其他回答者一样,商店没有特定的存储库或注册表。但是,dijit/registry
也可以使用dijit/registry::add()
函数来存储引用,例如:
// 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/