1

何らかの理由で、このビューで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;   

});

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 に答える