2014-02-23 66 views
4
  • 烬:1.5.0-beta.2
  • 灰烬数据:1.0.0-beta.7

我有以下路由器:如何避免太多的空记录?

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

这给了我最多一个空记录。

我的问题:有没有更好的方法来避免我的商店被填充(许多)空记录?

UPDATE:

而不是在isNew属性过滤的,我也许可以用currentModel

model: function() { 
    this.get('currentModel') || this.store.createRecord('post'); 
    }; 
+0

我可能在这里错过了一些东西,但为什么不是不创建新记录?从没有放置在商店中的对象生成表单? – jasonpgignac

+0

我看到使用'createRecord'的两个原因:1)当我想验证表单数据时,我想调用一个定义在模型上的'validate'方法,以及2)如果我有我的'submit'动作来创建一个对象添加到商店,如果我的'save()'被拒绝,我仍然会得到'空'记录。 – bazzel

+0

如果您只是在没有保存的情况下留下页面并将其销毁,那该怎么办? – jasonpgignac

回答