在Ember.View子类的方法中,我想仅在视图元素已插入DOM 时才对DOM 进行更改。我怎么检查呢?
我知道我可以像这样创建一个辅助属性:
didInsertElement: function() {
this.set('elementIsInserted', true);
}
willDestroyElement: function() {
this.set('elementIsInserted', false);
}
但是有一些规范的,内置的方式吗?
我没有找到任何撇去view.js的东西,但也许我错过了什么。
答案 0 :(得分:13)
每个视图都有一个_state
属性,在插入元素时设置为“inDOM”。
if (this._state=="inDOM") doStuff();
应该有效。确保您拥有正确的this
!
答案 1 :(得分:9)
如果您想避免设置辅助标志,可以扩展Ember.View:
Ember.View.reopen({
didInsertElement: function() {
this.set('elementIsInserted', true);
this._super();
},
willDestroyElement: function() {
this.set('elementIsInserted', false);
this._super();
}
});
现在每个扩展Ember.View的View都会得到上述内容。
核心团队的成员也建议您避免引用inDOM
,因为它是一个内部变量,并不打算在代码中使用。