Javascript 在Backbone.js集合中记录更改,我的集合未定义
嘿!我是Backbone.js的新手,所以这很可能是一个简单的问题 每次更改时,我都希望console.log我的朋友集合。因此,我绑定了集合中的所有事件以调用我的日志函数。。但是在logfunctionJavascript 在Backbone.js集合中记录更改,我的集合未定义,javascript,model-view-controller,backbone.js,Javascript,Model View Controller,Backbone.js,嘿!我是Backbone.js的新手,所以这很可能是一个简单的问题 每次更改时,我都希望console.log我的朋友集合。因此,我绑定了集合中的所有事件以调用我的日志函数。。但是在logfunction中,this.friends未定义。为什么? 这是我的“应用程序”: (函数($){ Friend=Backbone.Model.extend({ //创建一个模型以容纳朋友阿曲布他 名称:空 }); Friends=Backbone.Collection.extend({ 模特:朋友, //这
中,this.friends
未定义。为什么?
这是我的“应用程序”:
(函数($){
Friend=Backbone.Model.extend({
//创建一个模型以容纳朋友阿曲布他
名称:空
});
Friends=Backbone.Collection.extend({
模特:朋友,
//这是我们的朋友收藏,收藏我们的朋友模型
初始化:功能(模型、选项){
this.bind(“add”,options.view.addFriendLi);
this.bind(“all”、options.view.logFriendsCollection);
//侦听集合中的新添加内容,如果是,则调用view函数
}
});
window.AppView=Backbone.View.extend({
el:$(“正文”),
初始化:函数(){
this.friends=新朋友(null,{view:this});
},
活动:{
“单击#添加朋友”:“显示提示”
},
showPrompt:函数(){
var friend_name=prompt(“谁是你的朋友?”);
var friend_model=新朋友({“name”:friend_name});
this.friends.add(friends\u模型);
},
addFriendLi:功能(模型){
$(“#好友列表”).append(“”+model.get('name')+“ ”);
},
logFriendsCollection:函数(args){
console.log(“Friends”,this.Friends);
}
});var appview=新appview;
在您的应用程序视图中进行初始化
您应该调用.bindAll(这是“logFriendsCollection”)
将this
绑定到AppView
我认为当您将视图的logFriendsCollection
方法绑定到好友集合时,该方法也会接收集合的上下文。因此,当您在方法中引用this
时,this
指的是集合而不是视图。
我在你的Fiddler链接上搞乱了它,为了让它工作,我修改的代码是
logFriendsCollection: function () {
console.log("Friends", this);
}
嗯,也许我误解了你的意思……但这就是更改后的代码的样子,而这个.friends仍然没有定义:现在它看起来应该可以工作了,当我调用
new-appview
后,它就可以工作了。你在哪里调用logFriendsCollection()
?我以为在集合上触发任何事件时都会调用它:this.bind(“all”,options.view.logFriendsCollection”);
在Friends集合中。我希望每次更改集合时都调用它……当我显式调用appview.Friends.add(new Friend())时,它似乎与我一起工作
.ponzao,第二次绑定logFriendsCollection
是否会覆盖第一次?因此,即使您通过添加建议的行来为logFriendsCollection
提供适当的上下文,行this.bind(“all”,options.view.logFriendsCollection);
然后给方法提供集合的上下文而不是视图?
logFriendsCollection: function () {
console.log("Friends", this);
}