访问商店,而不会触发数据重新加载

时间:2013-08-09 06:46:23

标签: ember.js ember-data

在我的应用程序中,由于我需要访问所有路由中的节点,因此我提前App.Nodes.find()强制ApplicationRoute.setupController)。要获得一个节点,我有这个应用程序方法:

var App = Ember.Application.createWithMixins({
    ...
    getNode: function (nodeId) {
        var nodes = this.Node.find();
        var node = nodes.findProperty('id', nodeId);
        return node;
    },
    ...
});

但每次都会触发一个请求。为避免这种情况,我一直保留rawNodes缓存:

cacheNodes : function () {
    this.set('rawNodes', this.Node.find());
},

但我不想保留一个单独的缓存而不是ember在商店中的缓存,因为这迫使我手动保持同步。

我想重新使用商店中的数据而不是请求新数据。如何访问nodes商店?

1 个答案:

答案 0 :(得分:1)

为了实现您的目标,您有不同的选择。

例如,您可以使用.all()访问商店的缓存以避免触发请求,例如:

var App = Ember.Application.createWithMixins({
  ...
  getNode: function (nodeId) {
    var nodes = this.Node.all();
    var node = nodes.findProperty('id', nodeId);
    return node;
  },
  ...
});

根据您需要访问节点的位置,例如来自其他控制器,您还可以使用needs API访问您的节点,如下所示:

App.FooController = Ember.ObjectController.extend({
  needs: 'nodes',
  nodesContentBinding: 'controllers.nodes.content',
  someMethod: function() {
    this.get('nodesContent');
  }
});

或者甚至是另一种方法:

App.SomeRoute = Ember.Route.extend({
  someMethod: function() {
    this.controllerFor('nodes').get('content');
  }
});

所有这些方法都不会触发任何访问应用程序中已存在节点的请求。

希望它有所帮助。