2016-07-06 5 views
0

EmberJS 2.4를 사용하여 응용 프로그램을 작성하고 있습니다.Ember에서 중첩 된 객체를 업데이트하는 방법

export default Ember.Service.extend({ 
    crits: {}, 
    loadCrits() { 
     var newCrits = {}; 
     var max = Math.random() * 10; 
     for(var i=0; i<max; i++) { 
      var crit = {}; 
      var num = Math.random() * 5; 
      for(var j=0; j<num; j++) { 
       crit["data"+j] = j; 
      } 

      newCrits["crit"+i] = crit; 
     } 

     this.set("crits", newCrits); 
    } 
}); 

나는 테이블의 데이터를 표시하는 구성 요소를 가지고 : 나는 임의의 데이터 객체의 객체를 생성하는 다음과 같은 서비스가있다.

<table> 
    {{#each-in critService.crits as |key crit|}} 
    <tr> 
     <td>key</td> 
     <td><ul> 
      {{#each-in crit as |k v|}} 
       <li> 
        {{k}} = {{v}} 
        <button {{action "modifyCrit" crit k}}>change</button> 
       </li> 
      {{/each-in}} 
     </ul></td> 
    </tr> 
    {{/each-in}} 
</table> 

성분이 thusly 히 작용 취급 : 사용자가 값을 변경할 수 있도록 서로 중첩 된 객체의 각각의 키 - 값 쌍에 대해, I는 버튼이

export default Ember.Component.extend({ 
    critService: Ember.inject.service(), 
    actions: { 
     modifyCrit(crit, k) { 
      Ember.set(crit, k, "new value"); 
     } 
    } 
}); 

문제가 있다는 것이다를 보기가 업데이트되지 않습니다. 내가 올바르게 이해한다면 Ember는 "crit"중첩 된 객체를 "critService"와 연결하는 방법을 알지 못하기 때문입니다. 따라서 뷰를 업데이트 할 이벤트/관찰자가 트리거되지 않습니다.

사용자가 버튼을 클릭하면보기가 새 값으로 업데이트되도록 어떻게 수정할 수 있습니까?

답변

1

데이터 구조를 변경해야합니다. 나는 너에게 뒤죽박죽을 제공한다. this twiddle

+0

확인하십시오. 요점은 배열에 Ember.A()를 사용하고 키 - 값 쌍에 사용자 정의 객체 유형을 사용해야한다는 것입니다. 그러나 API 설명서에 Ember.EXTEND_PROTOTYPES가 true (기본값)이면 "Ember.A가 필요하지 않습니다."라는 메시지가 표시됩니다. 이것은 Ember.A 대신 정규 자바 스크립트 배열을 사용할 수 있다는 것을 의미합니까? 그리고 Ember가 KeyValue 해결 방법을 사용해야하는 것을 피하기 위해 Object 프로토 타입을 확장하지 않는다고 생각합니다 ... – Kricket

+1

기본 배열을 사용할 수 있습니다. –

관련 문제