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"와 연결하는 방법을 알지 못하기 때문입니다. 따라서 뷰를 업데이트 할 이벤트/관찰자가 트리거되지 않습니다.
사용자가 버튼을 클릭하면보기가 새 값으로 업데이트되도록 어떻게 수정할 수 있습니까?
확인하십시오. 요점은 배열에 Ember.A()를 사용하고 키 - 값 쌍에 사용자 정의 객체 유형을 사용해야한다는 것입니다. 그러나 API 설명서에 Ember.EXTEND_PROTOTYPES가 true (기본값)이면 "Ember.A가 필요하지 않습니다."라는 메시지가 표시됩니다. 이것은 Ember.A 대신 정규 자바 스크립트 배열을 사용할 수 있다는 것을 의미합니까? 그리고 Ember가 KeyValue 해결 방법을 사용해야하는 것을 피하기 위해 Object 프로토 타입을 확장하지 않는다고 생각합니다 ... – Kricket
기본 배열을 사용할 수 있습니다. –