1

我在将数组控制器添加为另一个数组控制器的项目控制器时遇到问题。

我得到的错误是:

加载路由时出错:TypeError {} ember.min.js:15
Uncaught TypeError: Object # has no method '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")

});
4

1 回答 1

2

App.RowController 应该是一个 objectController 您的项目(行)是在其属性之一中具有数组的对象,而不是数组本身......您可以直接在内部每个中分配控制器并从 App.RowController 中删除 itemController。

JavaScript

App.RowController = Ember.ObjectController.extend()

车把

{{each items itemController='item'}}

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

于 2013-10-21T16:41:13.923 回答