我有一个表组件,它与模型一起提供。 如果更新的数据来自服务器,我将有效负载推送到商店,该商店更新模型,表格应重新呈现。
问题:尽管所有记录都已更新(请参阅不同的交换值),但只会重新渲染这些记录,其中 iso 值也不同。我发现 sortProperties 数组和重新渲染的行之间存在连接。如果我将 sortProperties 更改为
sortProperties: ['name'],
然后将重新渲染所有这些行,其中记录的名称已更新。
如果所有三行都将被重新呈现,则预期的行为将是,因为所有三个记录的交换属性都已更改。
一些解释:
sortPropertiesWithOrders
根据asc
和sortProperties
数组生成字符串。该字符串在multiSort
中使用,它是一个computed.sort属性,它对表的内容(模型)进行多重分类。
更新
我找到了问题的解决方案,但它根本不灵活:
sortPropertiesWithOrders
应该在内容中观察每个元素的交换属性。由于它是一个组件,因此内容的属性是不可预测的,我不能像在这个例子中那样硬编码。
工作但不是最佳的JsBin:
(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:
@intuitivepixel https://github.com/emberjs/ember.js/issues/1128#issuecomment-93613364
无意识地窃取了这个想法