喂!我是Backbone.js的新手,所以这很可能是一个简单的问题。
我想在每次更改时都登录我的朋友收藏。所以我在集合中绑定了all
个事件来调用我的logFunction ..但是在logfunction this.friends
中是未定义的。为什么呢?
这是我的“app”:
(function ($) {
Friend = Backbone.Model.extend({
//Create a model to hold friend atribute
name: null
});
Friends = Backbone.Collection.extend({
model: Friend,
//This is our Friends collection and holds our Friend models
initialize: function (models, options) {
this.bind("add", options.view.addFriendLi);
this.bind("all", options.view.logFriendsCollection);
//Listen for new additions to the collection and call a view function if so
}
});
window.AppView = Backbone.View.extend({
el: $("body"),
initialize: function () {
this.friends = new Friends(null, { view: this });
},
events: {
"click #add-friend": "showPrompt"
},
showPrompt: function () {
var friend_name = prompt("Who is your friend?");
var friend_model = new Friend({ "name": friend_name });
this.friends.add(friend_model);
},
addFriendLi: function (model) {
$("#friends-list").append("<li>" + model.get('name') + "</li>");
},
logFriendsCollection: function (args) {
console.log("Friends", this.friends);
}
}); var appview = new AppView;
答案 0 :(得分:2)
在AppView.initialize
中,您应致电_.bindAll(this, 'logFriendsCollection')
将this
绑定到AppView
。
答案 1 :(得分:0)
我认为当您将视图的logFriendsCollection
方法绑定到Friend集合时,该方法也会接收集合的上下文。因此,当您在方法中引用this
时,this
指的是集合而不是视图。
我在你的Fiddler链接上乱搞它,我改变它以使其工作的代码是
logFriendsCollection: function () {
console.log("Friends", this);
}