将参数添加到路由模型会破坏 ArrayController

Adding params to route model breaks ArrayController

自从将参数添加到我们的路线模型后,我们无法再在我们的文档 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});
}

数组控制器:

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

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

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

通过查询查找(这就是 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');
}