在Ember

时间:2016-01-13 17:32:17

标签: ember.js ember-cli

使用

恩伯: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而且是初学者会让人更难理解

我希望能够根据用户需要添加组件

1 个答案:

答案 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}}