1

由于某种原因,我无法在此视图中触发 addOne 方法。渲染方法触发得很好。集合是从另一个实例化它的模块传入的。当我将括号添加到方法调用时,它会触发,但下划线会引发错误。

define(['backbone',
'jquery',
'underscore',
'views/user',
'models/user',
],
function(Backbone,$,_,UserView,UserModel){

var  Users= Backbone.View.extend({
    tagName:'ul',
    className:'well',

    initialize:function() {
        _.bindAll(this);
    },

    render:function() {
        this.collection.each( this.addOne, this );
        return this;
    },

    addOne:function() {
        console.log('inside of addOne');
        var userView = new UserView({model:UserModel});
        this.$el.append(userView.render().el);
    }
});
return Users;   

});

4

1 回答 1

0

您的 UserView 是模型视图。这意味着您需要将模型的实例而不是模型模块的定义传递给它,这就是“UserModel”在您的情况下所持有的。

例子:

var um = new UserModel({name: 'foo', id: 1});
var uv = new UserView({model: um}); //um is an instance of the model 'UserModel'

在您的情况下,由于模型对象来自对 this.collection 的迭代,它将是(如上面正确指出的那样mu is too short):

addOne: function(m) {
    console.log('inside of addOne');
    var userView = new UserView({model: m});
    this.$el.append(userView.render().el);
}

还要小心,this.collection当你调用 render() 时不要为空。

于 2013-03-18T13:02:34.923 回答