findAll()vs findQuery()中的deleteRecord

时间:2014-01-06 19:38:55

标签: ember.js ember-data

我遇到了以下问题:在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。

2 个答案:

答案 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);
  },

http://emberjs.jsbin.com/OxIDiVU/114/edit

答案 1 :(得分:0)

要在不创建其他过滤器的情况下实现所需效果,您还可以在控制器中调用类似的内容:

record.deleteRecord;
record.save(); // or record.destroyRecord() to combine the two calls
this.get('model').removeObject(record);

这将从任一类型的数组对象中删除已删除的记录。