在Ember.View
内可以做这样的事情:
App.ExperimentalView = Ember.View.extend({
templateName: 'experimental/table',
click: function (event) {
var $target = $(event.target).closest('tr'),
anotherView = Ember.View.create({
templateName: 'experimental/appendableRow'
};
anotherView.appendTo($target);
}
});
添加一个仅在单击元素时才在Handlebars
模板中定义其 HTML 标记的<tr/>
?
首先我想使用Ember.ContainerView
但后来我重读了文档并偶然发现了这句话:
Ember.ContainerView 的 DOM 表示的 HTML 内容将 仅是其子视图的呈现 HTML。
这导致我假设我需要一个代表我的表的Ember.ContainerView
和一个子视图来保存真正的<table/>
,它再次具有子视图和另一个Ember.ContainerView
对象,它将表示我的表体而不实际呈现一个<tbody/>
元素,恕我直言,这似乎有点奇怪。
编辑
这种方法的另一个好处可能是,您将能够声明一个不仅提供方法/属性,还提供自己的Handlebars
模板的Ember.Mixin
。因此,可以,比方说,使用过滤器和所有内容的 HTML 标记创建类似FilterableViewMixin
的东西,您只需实现和重置过滤器条目。
我会稍微不同。在模板中experimental/table
添加包含在experimental/appendableRow
中的代码段,并将其包装在 if 语句中。然后,如果用户单击表行,视图可以将单击委托给控制器,控制器将切换条件,从而显示experimental/appendableRow
代码段。