gpt4 book ai didi

javascript - Ember JS : observed properties on destroyed objects

转载 作者:行者123 更新时间:2023-11-30 18:30:30 25 4
gpt4 key购买 nike

我正在开发一个简单的应用程序,它会显示 Github 上特定存储库的问题列表。下面是 IssueView 的代码,它生成问题的 html 并插入到 DOM

 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>

我遇到的问题是这一行

App.LabelsController.addObserver("label", this, this.labelUpdated);

每次生成新的 IssueView 并将其插入 DOM 时,当更新 LabelsController 的“标签”属性时,我都会收到错误消息“您无法在已销毁的对象上设置观察到的属性”。当我查看 Firebug 时,我看到我的 IssueView 的状态是“destroy”而不是 inDOM。我想知道为什么会这样,我可以做些什么来解决这个问题?

最佳答案

模板中的#each 助手将确保在问题集合发生变化时创建和销毁 IssueView。您正在手动添加观察者,这意味着您也有责任删除观察者。我相信使用 observes(...) 函数原型(prototype)扩展可以为您解决这个问题。 (参见“观察属性变化”下的 http://ember-docs.herokuapp.com/symbols/Ember.Observable.html)。

如果您想采用手动路线,请考虑将 addObserver 移动到 didInsertElement 并在 willDestroyElement 中添加相应的 removeObserver。

附带说明:如果我正确理解您尝试使用此代码执行的操作,我会考虑绑定(bind)到一个 ArrayController,它根据所选标签而不是方法来处理呈现正确的问题集你正在服用。

关于javascript - Ember JS : observed properties on destroyed objects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9773810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com