【发布时间】:2016-01-13 17:32:16
【问题描述】:
使用 余烬:1.13.11, 灰烬数据:1.13.8, ember-cli:1.13.12
我想向网页动态添加一个组件 - 这个网页是另一个组件的模板,不要认为它会产生任何影响 -。这是我的代码 sn-p,在其中我尝试将名为 LyricsEditorLine 的组件添加到 <div> 标签,有点像 this
agenda-alpha/components/lyrics-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();
}
});
agenda-alpha/templates/components/lyrics-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,而且作为初学者更难理解
我希望能够根据用户的需要添加组件
【问题讨论】:
-
简短的回答是,如果没有一些潜在的不良副作用,您将无法做到这一点。为什么不能只使用 Handlebars
{{#if}}帮助器来动态渲染组件? -
未定义要添加的组件数量。这取决于用户的需求
-
你仍然可以在 Handlebars 中做到这一点,你只需要使用某种循环(有几种方法可以做到)。一般来说,你可以用 jQuery 做的几乎所有事情都可以使用 Handlebars 和计算/存储的属性来实现。
-
这一切都在 Ember 指南中。 Here's a guide on rendering a list of items。如果您发现自己在没有 jQuery 的情况下难以应付,那么您可能会遗漏一些关键特性。如果可以的话,我会一直阅读指南。基于模板的渲染与您习惯的有很大不同,但它更强大。
-
很抱歉。我链接到最新版本,但左上角有一个下拉菜单可以更改文档版本。 Here's the corresponding guide for 1.13.