使用Ember.js将新行动态插入到Table上下文中

Insert new line dynamically into a Table context, using Ember.js

本文关键字:Table 上下文 插入 动态 Ember js 新行 使用      更新时间:2024-01-02

我是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中是为了得到你的帮助。这是代码的链接。

更新分析

您忘记在init中调用this._super();,这使您的实例无法进行绑定管理设置。(固定修订版)

您在典型的Ember gotcha中感觉到:初始值永远不应该是对象,因为它们将由所有类实例共享。。。有关更多信息,请参阅本文。

修复样本-仍然建议实施

更新了您的JSFiddle@http://jsfiddle.net/MikeAski/AgyAk/12/有一些改进(最值得注意的是:使用控制器而不是直接使用ArrayProxy。它更惯用,可以切换到Router基础设施)