如何避免太多空记录?

时间:2014-02-23 09:29:23

标签: ember.js ember-data

  • Ember:1.5.0-beta.2
  • Ember数据:1.0.0-beta.7

我有以下路由器:

App.Router.map(function() {
  this.resource('posts', function() {
    this.route('new');
  });
});

我的PostsNewRoutemodel挂钩中创建了一条新记录:

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');
  };

1 个答案:

答案 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

替代方法是不在模型钩子中创建新记录,但根据你的评论,它似乎不是一个选项。