这是我第一次真正尝试使用服务器端点创建Backbone应用程序,我发现自己陷入了困境。
我的html中有一个下划线模板:
<tbody>
<% _.each(users, function(user) { %>
<tr>
<td><% user.get('firstname') %></td>
<td><% user.get('lastname') %></td>
<td><% user.get('age') %></td>
<td></td>
</tr>
<% }); %>
</tbody>
我在这里是我的模特/观点/集合:
var Users = Backbone.Collection.extend({
url: '/UMA.Service/Service1.svc/',
Model: User
});
var User = Backbone.Model.extend({
defaults: {
"firstname": "",
"lastname": "",
"age": null
}
});
var UserList = Backbone.View.extend({
el: '.page',
render: function() {
console.log(this.collection.toJSON());
var template = _.template($('#user-list-template').html(), {users: this.collection.model});
this.$el.html(template);
},
initialize: function() {
var that = this;
this.collection = new Users();
this.collection.fetch({
success: function(User) {
that.render();
}
});
}
});
我不确定我搞砸了哪里。我认为它可能必须是我在我的集合或模型中调用的东西,但我已经找了一段时间,如果有的话就找不到它。有人能帮助我吗?
我的控制台登录视图中的渲染功能,并返回我的所有数据,所以我看不出为什么这不起作用。有没有人有任何想法?
答案 0 :(得分:2)
而不是:
_.each(users, function(user) {...
尝试做:
users.each(function(user) { ...
Backbone“代理”各种下划线方法到主干对象(在本例中为Collection对象)。有关详细信息,请查看以下内容:http://backbonejs.org/#Collection-Underscore-Methods并向下滚动一些示例。
编辑:
@Bojangels是对的。您也不希望将this.collection.model传递给模板。你只想通过集合(在这种情况下)。该集合“包含”您关注的模型。 Collection.model是集合中的一个属性,它表示集合包含的模型类型,而不是模型本身的特定实例。
正如@Tallmaris在下面的评论中所述,这个难题的缺失部分是使用<%=
来输出值:
<td><%= user.get('firstname') %></td>
答案 1 :(得分:0)
您未正确将集合传递给模板。你需要这样做.collection.toJSON() 您的渲染功能应如下所示
render: function() {
console.log(this.collection.toJSON());
var template = _.template($('#user-list-template').html(), {users: this.collection.toJSON()});
this.$el.html(template);
}