我有一个用于Foo对象的ArrayController,它们具有与Bar对象的关系的“ bar”属性。
var Foo = DS.Model.extend({
bar : DS.belongsTo('bar', {async:true})
});
var Bar = DS.Model.extend({
foos : DS.hasMany('foo', {async:true})
});
我有一个针对Foos数组中发现的唯一柱的计算属性(某些Foos共享相同的Bar)。
var FooArray = Ember.ArrayController.extend({
bars: function(){
return this.get('content').getEach('bar');
}.property("@each.bar"),
unique_bars : function(){
return Ember.A(_.uniq(this.get('bars'), function(c){return c.get('id');}));
}.property("bars"),
});
因为Ember.Array.uniq不允许您指定比较器,所以在此处使用Underscore.uniq()。有Ember.Comparable mixin,但是它将为整个类定义一个唯一性比较器,这让我不感兴趣,因为我想根据不同情况下的某些不同属性来找到唯一性。
查找唯一子属性的方法可能需要改进。无论如何,以上代码无法按预期工作:
foo_array.get('unique_bars')
产生一个包含1 Bar的数组,尽管应该为20。
Ember.A(_.uniq(foo_array.get('bars'), function(c){return c.get('id');}))
效果很好。20条,从更大的数量开始的独特设置。
我相信在将第一个Foo添加到foo_array后,“ unique_bars”属性仅计算一次。
那么观察者表达式有什么问题呢?还是{async:true}干扰了这一点?
您应该能够使用getEach获取条形图和id,然后对ids集合使用uniq。然后您可以在每个栏上观看ID
var FooArray = Ember.ArrayController.extend({
bars: function(){
return this.getEach('bar');
}.property("@each.bar"),
bar_ids : function(){
return this.get('bars').getEach('id');
}.property("[email protected]"),
unique_ids: Em.computed.uniq('bar_ids')
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句