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