我遇到了以下问题:在ArrayController中的模型上调用deleteRecord()
时,在content
的路径中设置了findQuery(<model name>, {})
,模型未从ArrayController
移除{1}},即使deleteRecord
成功(我呼吁save
继续执行此操作)。但是,当我将其切换到findAll()
时,一切都按预期工作。任何想法为什么会这样?
我使用的是Ember 1.4.0-beta.1 + canary.4ffecd62和Ember Data 1.0.0-beta.4 + canary.7af6fcb0。
答案 0 :(得分:3)
find('type', {})
/ findQuery('type', {})
创建一个RecordArray。 findAll('type')
/ find('type')
实际返回一个实时RecordArray,其中包含商店中的所有当前记录。
为了更全面地理解这一点,商店all
/ filter
上还有另外两种方法可以返回Live RecordArrays,但它们不会向服务器调用记录。您可以将findAll('type')
/ find('type')
视为调用服务器然后调用all
方法的方法。
如果您需要,可以根据findQuery
的结果创建一个过滤器来欺骗并获得类似的效果。
model: function() {
return this.get('store').find('color', {dummy:'data'});
},
setupController:function(controller, model){
var filter = this.store.filter('color', function(color){
return model.contains(color);
});
this._super(controller, filter);
},
答案 1 :(得分:0)
要在不创建其他过滤器的情况下实现所需效果,您还可以在控制器中调用类似的内容:
record.deleteRecord;
record.save(); // or record.destroyRecord() to combine the two calls
this.get('model').removeObject(record);
这将从任一类型的数组对象中删除已删除的记录。