2014-09-26 3 views
1

Bar 개체와의 관계에 "bar"특성이있는 Foo 개체에 대한 ArrayController가 있습니다. ArrayController 속성 및 고유 필터의 속성으로 필터링

var Foo = DS.Model.extend({ 
    bar : DS.belongsTo('bar', {async:true}) 
}); 

var Bar = DS.Model.extend({ 
    foos : DS.hasMany('foo', {async:true}) 
}); 

내가 FOOS의 배열에서 볼 수있는 독특한 바의 계산 된 속성이 있습니다 (일부 FOOS 공통점이 같은 줄을 공유).

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"), 

}); 

Underscore.uniq은() Ember.Array.uniq 당신이 비교를 지정하지 않기 때문에이 사용됩니다. Ember.Comparable mixin이 있지만 전체 클래스에 대해 하나의 고유성 비교자를 정의 할 것입니다. 다른 환경에서 일부 속성을 기반으로 고유성을 찾기를 원하기 때문에 관심이 없습니다.

고유 한 하위 속성을 찾는 방법은 개선이 필요할 수 있습니다. 어쨌든 위의 코드는 예상대로 작동하지 않습니다 (20)

Ember.A(_.uniq(foo_array.get('bars'), function(c){return c.get('id');})) 

작품 잘가 있어야하지만

foo_array.get('unique_bars') 

1 줄을 포함하는 배열을 얻을 수 있습니다. 더 큰 숫자의 고유 한 모음 20 개.

'unique_bars'속성은 첫 번째 Foo가 foo_array에 추가 된 후에 한 번만 평가됩니다.

그렇다면 관찰자 표현은 무엇이 잘못 되었을까요? 또는 {async : true}가이 작업을 방해합니까?

답변

2

getEach를 사용하여 막대와 ID를 모두 가져온 다음 IDC에서 uniq를 사용할 수 있어야합니다. http://emberjs.jsbin.com/OxIDiVU/1102/edit

: 그럼 당신은 각 막대

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') 
}); 

예에 ID를 볼 수 있습니다

관련 문제