断言失败:Ember.CollectionView的内容必须实现Ember.Array

时间:2013-07-08 18:23:26

标签: ember.js handlebars.js

非常新的ember并试图搞乱我的第一个测试脚本。我一直在标题中得到错误,当我尝试使用把手循环数据夹具时会发生错误。任何帮助将不胜感激,谢谢!

Link to fiddle

给出错误的循环语句

{{#each player in controller}}
<tr> <!-- foreach statement here order by wins>loss>ties -->
 <td>{{ name }}</td>
</tr>
{{/each}} 

App.JS

var App = Ember.Application.create({
    LOG_TRANSITIONS: true,
});
// Router
App.Router.map(function(){});

App.PlayersRoute = Ember.Route.extend({
    model: function(){
        return App.Player.find();
    }
});
// Controllers
App.PlayersController = Ember.ArrayController.extend();
// View Helpers
// Models
App.Store = DS.Store.extend({
    revision: 11,
    adapter: 'DS.FixtureAdapter'
});

App.Player = DS.Model.extend({
    name: DS.attr('string'),
    wins: DS.attr('number'),
    losses: DS.attr('number'),
    ties: DS.attr('number'),
    drop: DS.attr('boolean')
});

App.Player.FIXTURES = [{
    id: 1,
    name: 'Joe Jame',
    wins: 2,
    losses: 0,
    ties: 0,
    drop: 'False'
}, {
    id: 2,
    name: 'Froggy Bottom',
    wins: 2,
    losses: 0,
    ties: 0,
    drop: 'False'
}];

2 个答案:

答案 0 :(得分:1)

render helper创建一个新的模板/视图/控制器,因此在您的情况下,您需要传入Player个对象的数组,以允许playerlist模板具有正确的上下文用于渲染。

{{ render "playerlist" content }} 

您还需要将PlayersRoute更改为IndexRoute,否则不会调用model挂钩,也不会加载您的数据。

App.IndexRoute = Ember.Route.extend({
    model: function(){
        return App.Player.find();
    }
});

JSFiddle example

答案 1 :(得分:1)

还有一个答案,首先我已将您的示例移植到jsbin IMO,它比jsfiddle更可靠,因为您已将render语句更改为partial并重命名为playerlist _playerlist模板到IndexRoute。另外我在model partial钩子中定义了获取你的夹具数据,这就是结果:http://jsbin.com/iceraz/2/edit。接缝现在按预期工作。由于我们使用的是Playerlist助手,因此不需要额外的IndexRoute控制器或路由,它将全部由{{1}}处理。

希望它有所帮助。