我是Ember和Handlebars的新手。 我正在尝试创建一个包含动态内容的表。 我将代码添加到 jsfiddle
我有以下代码:
<script type="text/x-handlebars">
<table border="1" bordercolor="FFCC00" style="background-color:FFFFCC" width="400" cellpadding="3" cellspacing="3">
{{#each Table.tableController}}
<tbody>
<tr>
<td width ="30%">{{title}}</td>
<td width ="30%">{{artist}}</td>
<td width ="40%">{{genre}}</td>
</tr>
</tbody>
{{/each}}
</table>
一个简单的表格,用于绑定我的控制器中的内容。
这是我的控制器和应用程序:
Table = Ember.Application.create({});
Table.Cell = Ember.Object.extend({
title: null,
artist: null,
genre: null,
listens: 0
});
Table.tableController = Ember.ArrayProxy.create({
content: [],
init: function() {
var data = Table.Cell.create({
title: 'Ruby',
artist: 'Kaiser Chiefs',
genre: 'Indie Rock',
});
this.pushObject(data);
data = Table.Cell.create({
title: 'Somebody Told Me',
artist: 'Killers',
genre: 'Indie Rock',
});
this.pushObject(data);
},
createSong: function(title, artist, genre) {
var cell = Table.Cell.create({
title: title,
artist: artist,
genre: genre,
});
this.pushObject(cell);
},
});
这工作正常。
现在我要添加一首新歌,我正在通过Chrome控制台执行以下操作:
Table.tableController.createSong('Feiticeira', 'Deftones', 'Alternative');
我可以验证是否创建了一个新的Object并将其插入到我的内容数组中。 但我的表格没有变化。
我做错了什么? 为什么我的表没有创建新内容?
我将此代码推送到jsfiddle中以获得帮助,帮助我。 Here's the link to the code again.
答案 0 :(得分:3)
更新分析
您忘记在this._super();
中调用init
,这会阻止您的实例进行绑定管理设置。 (Fixed revision)
你觉得在典型的Ember陷阱中:初始值永远不应该是对象,因为它们将被所有类实例共享...有关更多信息,请参阅this article。
修复示例 - 仍建议实施
更新了您的JSFiddle @ http://jsfiddle.net/MikeAski/AgyAk/12/并进行了一些改进(最值得注意的是:使用控制器而不是直接使用ArrayProxy
。它更加惯用,可以切换到{{1基础设施)。