繁体   English   中英

findAll()与findQuery()中的deleteRecord

[英]deleteRecord in findAll() vs findQuery()

我只是遇到以下问题:在deleteRecord()的模型上调用deleteRecord() ,该模型的content是使用findQuery(<model name>, {})在路由中设置的,即使deleteRecord ,也不会从ArrayController删除该模型。成功了(我打电话给savesave操作)。 但是,当我将其切换为findAll() ,一切都按预期工作。 任何想法为什么会这样?

我正在使用Ember 1.4.0-beta.1 + canary.4ffecd62和Ember Data 1.0.0-beta.4 + canary.7af6fcb0。

find('type', {}) / findQuery('type', {})创建一个RecordArray。 findAll('type') / find('type')实际上返回一个实时RecordArray,它具有商店中的所有当前记录。

为了更全面地了解这一点,在store 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

为了在不创建其他过滤器的情况下获得所需的效果,您还可以在控制器中调用如下代码:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM