如何根据商店ID检索商店

时间:2014-06-19 20:50:21

标签: dojo

我正在创建一个内存存储

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实例

3 个答案:

答案 0 :(得分:0)

据我所知,您所描述的并没有商店注册表。您需要在应用程序的控制器代码中自己编写代码。

商店是一个简单的对象。

你可以:

  1. 在代码周围手动传递商店。
  2. 编写注册表AMD模块(注意,这里是龙)。
  3. 此规则的唯一例外是,如果您已经使用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/