2014-11-20 1 views
0

을 준수엠버 데이터는이 같은 모델이 혼란

App.Category = DS.Model.extend({ 
    title: DS.attr('string'), 
    items: DS.hasMany('item', {async: true}), 
    itemCount: function() { 
    return this.get('items').get('length'); 
    }.property('items') 
}); 

을하며 매번 사용자가 추가하거나 항목을 제거 나는 UI 업데이트를 갖고 싶어 내가 "속성"이 사용할 수 없습니다 것 같다.

"observes"를 사용해야한다고 말할 수 있지만 "속성"대신 handlebars {{itemCount}} 태그를 사용하면 함수 자체가 문자열로 렌더링됩니다.

제대로 렌더링하려면 도움을 주시면 감사하겠습니다.

답변

1

난 당신이 간단하게 사용할 수 있다고 생각 : 당신의 핸들 템플릿

{{items.length}} 

합니다.

관찰자가 필요하지 않으며 계산 된 속성이 자체적으로 업데이트됩니다.

그리고 당신이 정말로 ITEMCOUNT라는 계산 된 속성을 원하는 경우, 그것은 다음과 같습니다

itemCount: function() { 
    return this.get('items.length'); 
}.property('items.length') 

또는 더 나은 :

itemCount: Ember.computed.alias('items.length') 
+0

그래,이 모든 것들이 효과가 있었지만 * * 내 코드가 작동하지 않는 이유는 무엇입니까? 두 번째 솔루션은 내 접근 방식과 거의 다르지 않습니다. – jasongonzales

+1

"itemCount"계산 된 속성이 'items'에만 의존하고 'items.length'에 의존하지 않으면 계산 된 속성 값은 'items'속성이 설정된 경우에만 업데이트됩니다. 예 : 다른 배열 또는 null => 코드가 더 명확해야합니다. –

+0

아, 그래, 알 겠어! 설명 해줘서 고마워. 이것은 나를 더 잘 이해하는 데 도움이됩니다. – jasongonzales

1

@처럼 플로랑 - blanvillain, 그냥 Ember.computed.alias를 사용하는 것을. 배열에 따라 계산 된 속성을 작성할 때 미래에, 당신은 속성 값의 변화에 ​​대응하기 위해 얻을 수있는 @each 구문을 사용해야합니다 같은

itemCount: function() { 
    return this.get('items').filterBy('isSelected'); 
}.property('[email protected]') 

뭔가. 자세한 내용은 the docs on computed properties을 참조하십시오.

+0

예! 두 답이 모두 도움이되었다고 생각하면 상향 조정할 수 있습니다. –

관련 문제