在我的应用程序中,由于我需要访问所有路由中的节点,因此我提前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
商店?
答案 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');
}
});
所有这些方法都不会触发任何访问应用程序中已存在节点的请求。
希望它有所帮助。