恩伯:1.13.11, Ember数据:1.13.8, ember-cli:1.13.12
我想动态地向网页添加一个组件 - 这个网页是另一个组件的模板,不要认为它会产生任何不同 - 。这是我的代码片段,我在其中尝试将名为LyricsEditorLine的组件添加到<div>
标记,不知何故,如this
议程-α/组件/歌词-editor.js内
import Ember from 'ember';
import LyricsEditorLine from 'agenda-alpha/components/lyrics-editor-line';
export default Ember.Component.extend({
afterRenderEvent:function(){
LyricsEditorLine.create().appendTo($("#in"));
},
init:function(){
Ember.run.scheduleOnce('afterRender', this, this.afterRenderEvent);
this._super();
}
});
议程-α/模板/组件/歌词-editor.hbs
<div id='in'> </div>
每次这给我
'Uncaught Error: Assertion Failed: You cannot append to an existing Ember.View. Consider using Ember.ContainerView instead'
注意ContainerViewhere
发现它是deprecated
我发现的大部分答案都没有使用ember-cli而且是初学者会让人更难理解
我希望能够根据用户需要添加组件
答案 0 :(得分:5)
我想你可能想要{{component}}
帮助dynamically render a component。
{{component "componentName" param1=paramValue param2=anotherParamValue}}
这意味着您可以拥有(制作示例)
{{component "lyrics-editor-line" line=line}}
最好的事情是componentName
可以是绑定属性
{{component componentName line=line}}
在你的控制器/组件中:
componentName: Ember.computed('prop1','prop2', function() {
if (this.get('prop1') === 'A') {
return 'my-component-a';
}
return 'default-component';
}),
line: computed('prop3', function() {
return this.get('prop2');
})
此外,您可以在每个循环中包含组件帮助程序(示例来自Ember文档)
{{#each model as |post|}}
{{!-- either foo-component or bar-component --}}
{{component post.componentName post=post}}
{{/each}}