我有以下路由器:
App.Router.map(function() {
this.resource('posts', function() {
this.route('new');
});
});
我的PostsNewRoute
在model
挂钩中创建了一条新记录:
App.PostsNewRoute = Ember.Route.extend({
model: function() {
return this.store.createRecord('post');
}
});
由于我不希望看到瞬态记录,因此我会在PostsRoute
中过滤掉它们:
App.PostsRoute = Ember.Route.extend({
model: function() {
this.store.find('post');
return this.store.filter('post', function(post) {
return !post.get('isNew');
});
}
});
这可以按预期工作,但每次转换到posts.new
都会向商店添加新记录,这是我想要避免的。因此,我不是每次调用模型钩子时调用createRecord
,而是过滤商店以获取空记录,如果找到了一个,则返回它:
App.PostsNewRoute = Ember.Route.extend({
model: function() {
var route = this;
return this.store.filter('post', function(post) {
return post.get('isNew');
}).then(function(result) {
return result.get('firstObject') || route.store.createRecord('post');
);
});
这给了我最多一张空记录。
我的问题:是否有更好的方法可以避免我的商店填充(很多)空记录?
更新:
我可以使用isNew
:
currentModel
属性进行过滤
model: function() {
this.get('currentModel') || this.store.createRecord('post');
};
答案 0 :(得分:3)
当您离开/new
路线时,您可以使用此插件https://github.com/dockyard/ember-data-route进行清理。它挂钩到willTransition
动作钩子,只要发生转换就会在路径上调用它。
源代码是一个简短的阅读:https://github.com/dockyard/ember-data-route/blob/master/addon/mixins/data-route.js。
替代方法是不在模型钩子中创建新记录,但根据你的评论,它似乎不是一个选项。