내 Array를 템플릿과 완전히 동기화 시키는데 문제가 있습니다. ArrayController는 객체를 푸시, 제거 및 업데이트하는 일을 주시하고 있습니다. 그러나 ArrayController는 결과를 필터링하고 객체 중 하나가 변경되면 새로운 속성이 실제로 필터에서 제외되어 결국 제거되지 않습니다. 객체가 변경 될 때 ArrayController가 다시 필터링됩니다.
콘텐츠가 객체의 배열로 설정되어 일을 단순화하기 위해, 아래의 코드를 볼 수 있지만 내 응용 프로그램에서 그것은 객체의와 함께이 항상 변화하고, 기본 배열이 변경 가능한, 그래서 실제로Ember.A([Ember.Object, Ember.Object])
이고 . 이 키를
unique
의 값과 일치하지 때문에
App.TabController = Ember.ArrayController.extend({
content: [
{id: 1, key: 'unique'},
{id: 2, key: 'unique'},
{id: 3, key: 'non-unique'},
],
filteredContent: function() {
var content = this.get('content');
return this.filter(function(item, idx, en) {
return (item.key == 'unique');
});
}.observes('content.length').property('content'),
});
위의 코드
는 템플릿에서 세 번째 개체를 유지하기위한 절대적으로 잘 작동합니다. 그러나 ID가 3 인 객체가 업데이트되면unique
의 주요 변경 사항이 템플릿에 푸시되지 않는다고 말하면서 몇 가지 해결책을 시도했지만 아무 소용이 없습니다.
또한 새 개체에 올바른 키가 있으면 템플릿에 삽입되고 제거되면 제거되며 서식 파일에 표시된 개체의 값은 다음과 같습니다. 개체가 변경되면 업데이트되어 ArrayController
이 작업을 수행하고 있다는 것을 알았으므로 결과를 다시 필터링하지 않습니다.
전체 재 렌더링이나 다른 마법을 강요하지 않아도 가능합니까? Ember.arrayComputed를 사용하여 배열의 재 계산을 피하기 위해
App.TabController = Ember.ArrayController.extend({
filteredContent: Ember.computed.filterBy('content', 'key', 'unique')
});
내 문제가 해결되어 답변으로 받아 들여집니다. 고맙습니다! – rickibalboa