コレクションに基づくビューに追加のモデルを含めるのに問題があります。親ビューによって作成されたコメントのリストがあります。コメントをレンダリングして削除ボタンを表示し、自分のコメントかどうかを強調表示するときに、現在のユーザー名を持っている必要があります。問題は、CommentListViewでモデルセッションにアクセスできないため、初期化でのthis.sessionまたはaddAllCommentToリストなどのメソッドからの呼び出しが定義されていないことです。私がここで間違っていることは何ですか?モデルからビューアパートメントに別のオブジェクトを簡単に追加できると思いました。
CommentListView:
window.CommentListView = Backbone.View.extend({
el: $("#comments"),
initialize: function () {
this.model.bind('reset', this.addAllCommentToList, this);
this.model.bind('add', this.refresh, this);
this.model.bind('remove', this.refresh, this);
},
refresh: function(){
this.model.fetch();
},
addCommentToList : function(comment) {
console.log("comment added to dom");
//need to check why el reference is not working
$("#comments").append(new CommentView({model:comment, sessionModel: this.session}).render().el);
},
addAllCommentToList: function() {
$("#comments").empty();
this.model.each(this.addCommentToList);
}
});
initializeメソッドの親リストからの呼び出し:
window.UserDetailView = Backbone.View.extend({
events: {
"click #newComment" : "newComment"
},
initialize: function () {
this.commentText = $("#commentText", this.el);
new CommentListView({ model: this.model.comments, session: this.model.session });
new LikeView({ model: this.model.like });
this.model.comments.fetch();
},
newComment : function() {
console.log("new comment");
this.model.comments.create(
new Comment({text: this.commentText.val()}), {wait: true}
);
this.commentText.val('');
}
});
モデル:
window.UserDetail = Backbone.Model.extend({
urlRoot:'/api/details',
initialize:function () {
this.comments = new Comments();
this.comments.url = "/api/details/" + this.id + "/comments";
this.like = new Like();
this.like.url = "/api/details/" + this.id + "/likes";
this.session = new Session();
},
...
});