2013-12-16 3 views
1

같은 클래스의 속성 (문자열 배열)에 의존하는 클래스에서 계산 된 속성을 갖고 싶습니다. 이 계산 된 속성을 배열의 특정 요소에만 의존하기를 원합니다.Ember.js 배열 속성의 요소에 대한 의존성을 가진 계산 된 속성

실제로 배열의 모든 요소에 의존하는지는 상관하지 않습니다.

I는 엠버과 같이 정의 :

var UpdateController = Ember.ArrayController.extend({ 

    PANE_1:  0, 
    PANE_2:  1, 
    PANE_3:  2, 

    init: function() { 
     this._super(); 
     this.set('paneClass', ["center", "right", "right"]); 
    }, 

    channelsPaneClass: function() { 
     return this.get('paneClass')[this.get('PANE_1')]; 
    }.property('[email protected]'), 
} 

이 계산 된 속성과 같이 템플릿에 사용되고 :

<div class="sf-seg-pane center"></div> 
:

<div {{bind-attr class=":sf-seg-pane channelsPaneClass"}}></div> 

이것은 다음과 같은 HTML을 출력

지금까지 그렇게 좋았습니다. 내가로 변경하려면 HTML을 기다리고 있었다

this.get('paneClass')[this.get('PANE_1')] = "xxx"; 

: : 지금과 같이 요소 paneClass[PANE_1]의 값을 변경하는 경우에는

<div class="sf-seg-pane xxx"></div> 

을하지만 그렇지 않습니다. 내가 .property('paneClass') 같은 속성 종속성을 지정하려고했습니다

  1. :

    다른 내가 시도 무엇 있습니다.

  2. 템플릿에 {{bind-attr class=":sf-seg-pane paneClass[0]"}}을 사용해 보았습니다.
  3. 저는 this을 보았습니다.이 배열은 배열이 객체의 배열 일 때 완료되도록하는 방법을 설명합니다. 원시 데이터 형식의 배열에 대한 예제가 표시되지 않습니다.

답변

2

아래에서 데이터를 변경하는 세터를 사용할 필요가 . 또한 propertyPANE_1을 추가하십시오 (종속 키이므로).

var UpdateController = Ember.ArrayController.extend({ 
    PANE_1:  0, 
    PANE_2:  1, 
    PANE_3:  2, 
    init: function() { 
     this._super(); 
     this.set('paneClass', ["center", "right", "right"]); 
    }, 
    channelsPaneClass: function() { 
     return this.get('paneClass')[this.get('pane1')]; 
    }.property('paneClass.[]', 'PANE_1'), 
} 

그리고

배열하면 array.insertAt(index, content) 대신 array[index] = content 사용할 필요가 변경하는 관찰자에 통지합니다. 귀하의 경우 :

this.get('paneClass').insertAt(this.get('PANE_1'), "xxx"); 
+0

매력처럼 작동합니다! 시간 내 줘서 고마워. 괜찮 으면이 문서가 어딘가에 있습니다. 나는 몇 시간 동안 인터넷 검색을 해왔다. 마지막으로, 여기에 설명 된대로 객체를 사용하는 해결 방법을 사용했습니다. http://emberjs.com/guides/object-model/computed-properties-and-aggregate-data/ –

+0

여러분을 환영합니다. 'insertAt'에 대해서 내가 아는 유일한 곳은 [documentation] (http://emberjs.com/api/classes/Ember.MutableArray.html#method_insertAt)입니다. –

+0

죄송합니다. 저는 'paneClass. []'구문을 사용했습니다. –

0

당신은 내가 [email protected]가 배열에 객체에서 몇 가지 특성을 관찰하기위한 것입니다 때문에 paneClass.[] 대신 [email protected]을 사용하는 것이 좋습니다, 당신은 본질적으로 타다 남은

+0

어떻게 배열 요소에 대한 setter를 사용합니까? 그것이 객체라면, this.set ('paneClass', "xxx")를 사용합니다. 그러나'paneClass'는 배열이고 0 번째 요소를 "xxx"로 설정하고 싶습니다. –

관련 문제