Ember.js:检查是否将视图元素插入DOM

时间:2012-05-13 01:50:45

标签: ember.js

在Ember.View子类的方法中,我想仅在视图元素已插入DOM 时才对DOM 进行更改。我怎么检查呢?

我知道我可以像这样创建一个辅助属性:

didInsertElement: function() {
  this.set('elementIsInserted', true);
}
willDestroyElement: function() {
  this.set('elementIsInserted', false);
}

但是有一些规范的,内置的方式吗?

我没有找到任何撇去view.js的东西,但也许我错过了什么。

2 个答案:

答案 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,因为它是一个内部变量,并不打算在代码中使用。