0

我对 Backbone.js 非常陌生,并且正在尝试让这个简单的示例正常工作。基本上,在 jsFiddle 中,当我运行代码时,它告诉我未定义属性“firstname”。

这是小提琴的链接:http: //jsfiddle.net/cpeele00/YjUBG/16/

var User = Backbone.Model.extend({});

var UserList = Backbone.Collection.extend({
   model: User
});

var UserView = Backbone.View.extend({
   el: $('#user-list ul'),
   template: _.template($('#user-list-template').html()),
   render: function() {
       this.$el.html(this.template(this.model.toJSON()));
       return this;
   }
});

var user1 = new User();
user1.set({
   firstname: 'Momo',
   lastname: 'Peele'
});

var user2 = new User();
user2.set({
   firstname: 'Bobo',
   lastname: 'Peele'
});


var users = new UserList([user1, user2]);

var userView = new UserView({model: users});

userView.render();

​</p>

任何帮助解决这个问题将不胜感激。

视听/视听

克里斯

4

1 回答 1

1

由于模型实际上是一个集合,因此您需要对其进行迭代,并将模板应用于集合中的每个模型。一种方法是使用下划线扩展Collection.each

render: function() {
    // clear the view
    this.$el.empty();

    // save a reference to the view object
    var self = this;

    // iterate over the collection
    this.model.each(function(singleModel) {

        // render the model
        self.$el.append(self.template(singleModel.toJSON()));
    });

    return this;
}

这是更新的小提琴。

(如果您愿意,您也可以将迭代放入模板本身,但我认为通常最好将代码保留在视图中,而不是模板中。)

于 2012-12-22T23:36:31.153 回答