Backbone.js 未使用()调用模块方法

Backbone.js 未使用()调用模块方法,backbone.js,Backbone.js,由于某些原因,我无法在此视图中启动addOne方法。render方法激发得很好。集合是从实例化它的另一个模块传入的。当我将括号添加到方法调用时,它将触发,但下划线会引发错误 define(['backbone', 'jquery', 'underscore', 'views/user', 'models/user', ], function(Backbone,$,_,UserView,UserModel){ var Users= Backbone.View.extend({ tagN

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

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;   

})

您的用户视图是一个模型视图。这意味着您需要向它传递一个模型的实例,而不是模型模块的定义,这是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正确指出的是,它太短了:


还要小心,以便调用render时this.collection不是空的。

您确定在调用this.collection.each时集合不是空的吗?而且,当您已经将所有视图的方法与u.bindAllthis绑定后,您不需要为每个视图添加第二个参数。此外,您可能需要addOne:functionmodel和新的UserView{model:model}。@muistooshort child{models:Array[0],length:0,_byId:Object,constructor:function,model:function…}\u byId:Object\u idAttr:id-length:4 models:Array[4] 这就是集合记录到控制台的内容。可能与服务器的json响应有关?请注意,模型:Array[0]?和console.logthis.collection.toJSON将解决可能导致与console.log混淆的异步问题。
addOne: function(m) {
    console.log('inside of addOne');
    var userView = new UserView({model: m});
    this.$el.append(userView.render().el);
}