Ember JS:观察到被破坏对象的属性
Ember JS: observed properties on destroyed objects
我正在开发一个简单的应用程序,它在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的"label"属性更新时,我都会收到一个错误"您无法在已销毁对象上设置观察到的属性"。当我查看Firebug时,我发现IssueView的状态是"destroy"而不是inDOM。我想知道为什么会发生这种事,我能做些什么来避免它?
模板中的#each
帮助程序将确保IssueViews在问题集合更改时被创建和销毁。您正在手动添加观察者,这意味着您也要负责删除观察者。我相信使用observes(...)
函数原型扩展将为您处理此问题。(请参见http://ember-docs.herokuapp.com/symbols/Ember.Observable.html在"观察财产变化"下)。
如果您想采用手动路由,请考虑将addObserver移动到didInsertElement
,并在willDestroyElement
中添加相应的removeObserver。
还有一点需要注意:如果我能正确理解你试图用这个代码做什么,我会考虑绑定到一个ArrayController,它可以根据所选标签而不是你正在采取的方法来处理正确的问题集
相关文章:
- 如何从对象的原型方法访问JavaScript对象属性
- 如何将数组项添加到对象属性中
- 设置嵌套对象属性的更好方法
- JavaScript管理具有重复属性名称的对象属性
- 如何使用element.myobj.prop等具有对象属性的元素
- 如何使用(this)访问Angular 2 http rxjs catch函数中的对象属性
- Es6:能够在设置/更新/删除对象属性时调用自定义方法
- 如何在AngularJS工厂中正确声明对象属性
- 如何使用object.assign()从其他对象引用基本对象属性
- 使用XPath样式访问Javascript JSON对象属性
- 将javascript对象(属性+值)合并到一个对象中
- 数组:使对象属性成为数组键
- 无法从JavaScript中的函数调用对象属性
- Google Closure Advanced |无法识别对象属性|动态属性
- Javascript从匿名函数访问外部对象属性
- 从函数更改对象属性
- 如何从字符串变量访问对象属性
- 从嵌套对象属性中获取排除某个值的最高值
- 在Aurelia computeds中,当设置依赖关系时,如何声明对对象属性的依赖关系
- 传递数量不确定的可能嵌套的对象属性