Emberjs模型仅部分更新

时间:2015-05-14 23:05:58

标签: ember.js

我有一个表组件,它与模型一起提供。 如果更新的数据来自服务器,我将有效负载推送到商店,该商店更新模型,表格应重新呈现。

问题:尽管所有记录都已更新(请参阅不同的交换值),但只会重新渲染这些记录,其中 iso 值也不同。我发现 sortProperties 数组和重新渲染的行之间存在连接。如果我将 sortProperties 更改为

sortProperties: ['name'],

然后将重新渲染所有这些行,其中记录的名称已更新。

如果所有三行都将被重新呈现,则预期的行为将是,因为所有三个记录的交换属性都已更改。

http://emberjs.jsbin.com/jofulufina/16/edit

一些解释: sortPropertiesWithOrders根据ascsortProperties数组生成字符串。该字符串在multiSort中使用,它是一个computed.sort属性,它对表的内容(模型)进行多重分类。

更新

我找到了问题的解决方案,但它根本不灵活: sortPropertiesWithOrders应该在内容中观察每个元素的交换属性。由于它是一个组件,因此内容的属性是不可预测的,我不能像在这个例子中那样硬编码。 工作但不是最佳的JsBin:

http://emberjs.jsbin.com/bawatonela/1/edit

(HOPEFULLY)LAST UPDATE 现在我在表组件的init中定义sortPropertiesWithOrders。这样我就可以动态地构建依赖键的字符串。有人可能会发现有用的代码:

  init: function(){
    this._super();
    var columns = this.get('columns');
    var i=0;
    var cps = [];
    for(i=0; i < columns.length; i++ ){
        if (columns[i].property)
          cps.push(columns[i].property);
    }
    var str = 'content.@each.{' + cps.join(',') + '}';


    Ember.defineProperty(this, 'sortPropertiesWithOrders',   Ember.computed(str, 'sortProperties', 'asc', function(){
      var ret = Ember.A();
      var asc = this.get('asc');
      this.get('sortProperties').forEach(function(property, i){

        var tmp = asc[i] ? property : property + ':desc';
        ret.push(tmp);
      });

      return ret;
    }));
  },

工作的JsBin:

http://emberjs.jsbin.com/bawatonela/3/edit?js,output

@intuitivepixel https://github.com/emberjs/ember.js/issues/1128#issuecomment-93613364

无意识地窃取了这个想法

0 个答案:

没有答案