Ember 无标签组件 innerhtml
Ember tagless component innerhtml
我在 Ember 中有一个无标记组件,并希望在生命周期挂钩(例如 didRender)上使用 innerHtml (this.element
)。当我使用 this.element
时,值总是 null
。当我向组件 (tagName: 'div'
) 添加标记名时,我有带有 this.element
的组件的 innerHtml,但是我可以在不设置标记名的情况下获取 innerHtml 吗?
是的,这个坏了。有关详细信息,请参阅 https://github.com/emberjs/ember.js/issues/13627。
此处已发布解决方法:https://github.com/emberjs/rfcs/issues/168但是,它使用私有 api,可能会在未来版本中中断而不会发出警告。
我的建议是要么通过 tagName 使用元素以便 this.element
存在,要么在组件的父元素上放置一个 class 以便您可以使用 document.querySelector('.class-name').innerHTML
-- 但是这需要知道父元素。
this.element
不是给你innerHTML
,而是给你一个真正的HTMLElement
。根据定义,无标记组件没有任何 Element
自己的组件。所以 this.element
必然为空。
我们没有添加等效 属性 来检索 Range
的最大原因(这是您需要用来表示 DOM 的无标记组件区域的东西)与 this.element
不同的是,Range
可能会在组件的整个生命周期内发生变化。让它完全可观察会很昂贵,让它不可观察会很容易产生错误。
Gaurav 建议的内容涵盖了大多数常见用例:明确标记您真正想要查找的元素并通过 querySelector
或 querySelectorAll
.
访问它们
如果您正在做一些非常奇特的事情,并且您知道这只是一个可能会过时的快照,那么逃生舱口就是 Ember.ViewUtils.getViewBounds
。它没有被标记为 public,但它被 Ember Inspector 等官方项目所依赖,所以我们绝对不会在没有警告的情况下破坏它。与任何大量使用的非 public API 一样,我们会发出弃用警告并等待完整的 LTS 周期。
在 Ember.ViewUtils.getViewBounds
的情况下,只需将其标记为 public 就可以成为一个强有力的案例,如果有人为此编写 RFC,我认为我们可以就此达成共识。
我在 Ember 中有一个无标记组件,并希望在生命周期挂钩(例如 didRender)上使用 innerHtml (this.element
)。当我使用 this.element
时,值总是 null
。当我向组件 (tagName: 'div'
) 添加标记名时,我有带有 this.element
的组件的 innerHtml,但是我可以在不设置标记名的情况下获取 innerHtml 吗?
是的,这个坏了。有关详细信息,请参阅 https://github.com/emberjs/ember.js/issues/13627。
此处已发布解决方法:https://github.com/emberjs/rfcs/issues/168但是,它使用私有 api,可能会在未来版本中中断而不会发出警告。
我的建议是要么通过 tagName 使用元素以便 this.element
存在,要么在组件的父元素上放置一个 class 以便您可以使用 document.querySelector('.class-name').innerHTML
-- 但是这需要知道父元素。
this.element
不是给你innerHTML
,而是给你一个真正的HTMLElement
。根据定义,无标记组件没有任何 Element
自己的组件。所以 this.element
必然为空。
我们没有添加等效 属性 来检索 Range
的最大原因(这是您需要用来表示 DOM 的无标记组件区域的东西)与 this.element
不同的是,Range
可能会在组件的整个生命周期内发生变化。让它完全可观察会很昂贵,让它不可观察会很容易产生错误。
Gaurav 建议的内容涵盖了大多数常见用例:明确标记您真正想要查找的元素并通过 querySelector
或 querySelectorAll
.
如果您正在做一些非常奇特的事情,并且您知道这只是一个可能会过时的快照,那么逃生舱口就是 Ember.ViewUtils.getViewBounds
。它没有被标记为 public,但它被 Ember Inspector 等官方项目所依赖,所以我们绝对不会在没有警告的情况下破坏它。与任何大量使用的非 public API 一样,我们会发出弃用警告并等待完整的 LTS 周期。
在 Ember.ViewUtils.getViewBounds
的情况下,只需将其标记为 public 就可以成为一个强有力的案例,如果有人为此编写 RFC,我认为我们可以就此达成共识。