EmberJS:ArrayController - > ArrayController - > ObjectController错误

时间:2013-10-21 16:20:40

标签: javascript ember.js handlebars.js

我在添加阵列控制器作为另一个阵列控制器的项目控制器时遇到问题。

我得到的错误是:

  

加载路径时出错:TypeError {} ember.min.js:15
      未捕获的TypeError:Object#没有方法'addArrayObserver'

JSFiddle:http://jsfiddle.net/t5Uyr/3/

这是我的HTML:

<script type="text/x-handlebars">
    <table>
        <thead>
            <tr>
                <th>id</th>
                <th>items</th>
            </tr>
        </thead>
        <tbody>
            {{#each}}
            <tr>
                <td>{{id}}</td>
                <td>
                    <ul>
                    {{#each items}}
                        <li>{{formattedName}}</li>
                    {{/each}}
                    </ul>
                </td>
            </tr>
            {{/each}}
        </tbody>
    </table>
</script>

正如您所看到的,在模板内部,我使用每个循环迭代一组数据,在每个循环中我想迭代数据的子集合。

这是我的JS代码:

window.App = Ember.Application.create({});

App.ApplicationRoute = Ember.Route.extend({

    model: function () {

        var data = [
            {
                id: "111",
                items: [
                    {
                        name: "foo"
                    },
                    {
                        name: "bar"
                    }
                ]
            },
            {
                id: "222",
                items: [
                    {
                        name: "hello"
                    },
                    {
                        name: "world"
                    }
                ]
            }
        ];

        return data;

    }

});

App.ApplicationController = Ember.ArrayController.extend({

    itemController: "row"

});

App.RowController = Ember.ArrayController.extend({

    itemController: "item"

});

App.ItemController = Ember.ObjectController.extend({

    formattedName: function () {
        return "My name is " + this.get("name");
    }.property("name")

});

1 个答案:

答案 0 :(得分:2)

App.RowController应该是一个objectController你的items(rows)是一个对象,在它们的一个属性中有一个数组,而不是数组本身...... 您可以直接在内部协调控制器,并从App.RowController中删除itemController。

的JavaScript

App.RowController = Ember.ObjectController.extend()

车把

{{each items itemController='item'}}

JsFiddle http://jsfiddle.net/mUJAa/3/