我想在父模板中获取组件自动生成的elementId
,例如
<script type="text/x-handlebars" data-template-name="index">
my-component elementId: {{myComponentElementId}}
{{my-component}}
</script>
有没有一种简单的方法可以在不改变父控制器或my-component
的情况下执行此操作?
答案 0 :(得分:1)
elementId
。您可以确保在组件完全插入DOM后设置ID。因此,您可以使用didInsertElement
这样的操作:
some-example elementId: {{myComponentElementId}}
{{some-example elementIdProxy=myComponentElementId}}
didInsertElement: function() {
this.set("elementIdProxy", this.get("elementId"));
}
因此,您通过其他绑定(elementId
在此情况下代理elementIdProxy
。我强烈建议不要明确设置ID,因为它在应用程序中必须是唯一的。 Ember关心这一点,所以重新发明轮子并不是一个好主意。
答案 1 :(得分:0)
在您的bin中,您尝试传递id但未在控制器上指定值。在控制器的setupCotroller
挂钩中设置id值,该值将用作id。
否则你需要通过动作传递id。 Here is the link.
答案 2 :(得分:0)
我可以通过以下方式访问elementId
viewName
属性view.[componentName].elementId
示例:
<script type="text/x-handlebars" data-template-name="index">
my-component elementId: {{view.myComponent.elementId}}
{{my-component viewName="myComponent"}}
</script>
注意强>
随着Glimmer渲染引擎的引入(Ember版本&gt; = 1.13 ),通过elementId
访问viewName
为not supported any more。
相反,组件的elementId
应明确设置为特定值,例如
示例:
<script type="text/x-handlebars" data-template-name="index">
my-component elementId: index-my-component
{{my-component id="index-my-component"}}
</script>
在这种情况下,开发人员需要确保elementId
在页面DOM中是唯一的。如果要多次呈现模板,elementId
应该与父组件elementId
和一些预定义的id(请参阅JsBin)
答案 3 :(得分:0)
问题(即错误消息的来源)是您尝试通过属性绑定覆盖组件的elementId
属性。我试图传递id
时遇到了这个问题。一个简单的解决方法是使用_elementId
或任何其他不是elementId
的单词。查看JSBin