6

在 Ember.View 子类的方法中,我只想在视图元素已插入 DOM时对 DOM 进行更改。我该如何检查?

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

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

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

我没有找到任何略读view.js的内容,但也许我遗漏了一些东西。

4

2 回答 2

13

每个视图都有一个_state属性,在插入元素时将其设置为“inDOM”。

if (this._state=="inDOM") doStuff();

应该管用。确保你有正确的this

于 2012-05-13T02:00:03.547 回答
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 都将获得上述内容。

Also a member of the core team suggested that you avoid referring to inDOM as it is an internal variable and not intended to be used in code.

于 2012-05-13T07:06:06.427 回答