不使用()调用模块方法

时间:2013-03-18 04:24:25

标签: backbone.js

出于某种原因,我无法在此视图中触发addOne方法。 render方法很好。这个集合是从另一个实例化它的模块传入的。当我将括号添加到方法调用时它会触发,但是Underscore会抛出错误。

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;   

});

1 个答案:

答案 0 :(得分: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);
}

另外要小心,以便在调用render()时this.collection不为空。