Github의 특정 repo 문제 목록을 표시하는 간단한 응용 프로그램을 만들고 있습니다. 다음은 DOMEmber JS : 파괴 된 객체의 속성보기
App.IssueView = Ember.View.extend({
tagName: "li",
classNames: ["sugar", "issue_wrapper"],
templateName: "app/templates/issue",
init: function() {
App.LabelsController.addObserver("label", this, this.labelUpdated);
this._super();
},
click: function(event) {
var target = event.target;
if (target.className == "title") {
// Using bindingContext is a temporary solution to access data of this issue
App.IssuesController.set("issue", this.bindingContext);
App.IssuesController.set("state", "viewIssueDetails").notifyPropertyChange("state");
}
},
labelUpdated: function() {
this.labels = this.labels || this._collectLabels(),
label = App.LabelsController.get("label").name;
this.set("isVisible", this.labels.indexOf(label) != -1);
},
_collectLabels: function() {
var labels = [];
this.bindingContext.labels.forEach(function(label) { labels.push(label.name) });
return labels;
}
})
나는 그것이 내가 가진 문제는이 라인이다
<script type="text/x-handlebars">
{{#view App.IssuesListView}}
{{#each App.IssuesController}}
{{view App.IssueView contentBinding="this"}}
{{/each}}
{{/view}}
</script>
입니다 생성 방법에 삽입 문제의 HTML을 생성하고 IssueView의 코드는
App.LabelsController.addObserver("label", this, this.labelUpdated);
새 IssueView가 생성되어 DOM에 삽입 될 때마다 LabelsController의 'label'속성이 업데이트 될 때 "파괴 된 객체에 대해 관찰 된 속성을 설정할 수 없습니다"라는 오류가 발생합니다. Firebug를 살펴보면 이슈뷰의 상태가 inDOM 대신 "파괴"되는 것을 보았습니다. 왜 그런 일이 있었는지 궁금해하고 그걸 해결하기 위해 무엇을 할 수 있습니까?
좋습니다. 저는 수동 접근법을 사용하고 'willDestroyElement'에서 'removeObserver'라고 불렀습니다. 이제는 작동하는 것 같습니다. –
그리고 여러분의 쪽지에 관해서는, 제가 여기서하고있는 것입니다. 기본적으로 'labelUpdated'가 호출되면 각각의 'issueView'는 스스로에게 묻습니다 : '이봐, 내 레이블 중 하나를 선택하는 레이블인가?', 그렇지 않으면보기가 숨겨지고 반대의 경우도 마찬가지입니다. –
기쁘다. 부가 메모에서 제안하는 대체 설계는 라벨이 업데이트되고 배열 컨트롤러 (예 :'App.FilteredIssuesController')가 콘텐츠 배열을 업데이트하여 적절한 문제를 추가/제거하는 것입니다. '# each' 템플릿은'FilteredIssuesController'에 묶여 져서 컨트롤러의 콘텐트 배열이 바뀌면 자동으로 업데이트됩니다. 더 적은 코드와 모델 및 뷰 관심사의 분리를 의미합니다. 그냥 내 .02 달러. :) –