将params添加到路径模型中会断开ArrayController

时间:2015-02-16 13:40:50

标签: ember.js ember-data

由于在我们的路径模型中添加了一个参数,我们无法再在Document ArrayController中添加新项目:

旧路线:

model: function(params) { 
        return this.store.find('document');
}

新路线:

queryParams: {
    owner: {
        refreshModel: true
    }
},
model: function(params) { 
        var ownerID = this.get('ownerID')
        return this.store.find('document', {owner : ownerID});
}

ArrayController:

actions: {
      addItem: function() {
      this.store.createRecord('document');
}

代码仍然加载文档,但是当调用addItem操作时,新创建的记录不会添加到ArrayController的内容中。在旧代码中,单击addItem会立即向屏幕上的文档添加新文档。我已经确认服务器正在返回一个数组,因此不确定为什么无法再添加新文档。任何帮助将不胜感激。

背景 设置是用户具有文档,但也可以查看其他用户的文档。这就是为什么我们需要动态更改文档网址中的ownerID,以便我们可以轻松显示属于特定用户的文档。

1 个答案:

答案 0 :(得分:1)

按查询查找(find('foo', {bar:'baz'})不是实时记录集。它只显示调用服务器返回的记录。

当您创建新的记录客户端时,Ember不知道该服务器端条件是否匹配。您需要将filter与服务器端和客户端标准一起使用(这将调用服务器,并通过客户端过滤器继续过滤所有客户端记录)

this.store.filter('documents', {document : 'asdf'}, function(record){
  return record.get('title') == 'So I Married an Axe Murderer';
});

或者如果您只是希望它始终显示所有客户端记录,您可以执行此操作

// make the call
model: function(params){
  this.store.find('document', {owner : params.ownerID});
  return this.store.all('document');
}