Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Backbone.js集合中记录更改,我的集合未定义_Javascript_Model View Controller_Backbone.js - Fatal编程技术网

Javascript 在Backbone.js集合中记录更改,我的集合未定义

Javascript 在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({ 模特:朋友, //这

嘿!我是Backbone.js的新手,所以这很可能是一个简单的问题

每次更改时,我都希望console.log我的朋友集合。因此,我绑定了集合中的所有事件以调用我的日志函数。。但是在logfunction
中,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);
               }