0

単純なコレクション ビューをレンダリングしようとしていますが、奇妙な問題が発生しています。

問題は、コレクションのビューでモデルの render メソッドを呼び出そうとすると、render メソッドが見つからないことです。

私のモデルとビュー

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

var PersonView = Backbone.View.extend({
tagName : "person",
events:{
    "click h3":"alertStatus"

},
initialize:function(){
    this.model.on('change',this.render,this);

} ,
render:function(){

    var underscore_template = _.template('<h3>Name : <%= name %></h3>'+
        '<h3>Last Name : <%= surname %></h3>' +
        '<h3>Email : <%= email %> </h3>') ;

    console.log("Person View Render Oldu");
    this.$el.html(underscore_template(this.model.toJSON()));

},
alertStatus :function(e){
    alert("Clicked on Model View");
}
});

マイ コレクションとコレクション ビュー

var PersonList = Backbone.Collection.extend({
model:PersonModel,
url:'/models'
});

var personList = new PersonList();

var PersonListView = Backbone.View.extend({
tagName : "personlist",
render : function(){
    this.collection.forEach(this.addOne,this);
},
addOne : function(personItem){
    var personView = new PersonView({model:personItem});
    this.$el.append(personView.render().el);  // The call to personView.render throws undefined
},
initialize : function(){
    this.collection.on('add',this.addOne,this);
    this.collection.on('reset',this.addAll,this);
},
addAll : function(){
    this.collection.forEach(this.addOne,this);
}
});

var personListView = new PersonListView({
collection:personList
});


personList.fetch({
success:function(){
    console.log("Fetch success");
}
});

Jquery で準備が整ったドキュメントでこの JS を呼び出し、app という名前の ID を持つ div に追加しています。

私のフェッチも成功しました。 personView.render().el を呼び出そうとすると、コレクション ビューの addOne 関数で問題が解決しません。

どんな助けでも大歓迎です。

4

1 に答える 1

1

You forgot returning the element in your render:

render : function() {

    var underscore_template = _.template('<h3>Name : <%= name %></h3>'+
        '<h3>Last Name : <%= surname %></h3>' +
        '<h3>Email : <%= email %> </h3>') ;

    console.log("Person View Render Oldu");
    this.$el.html(underscore_template(this.model.toJSON()));

    return this;  // chaining
}

Otherwise you can't chain it and you can't access el afterwards.

于 2012-12-23T13:16:52.987 に答える