Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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 主干-从子视图触发父视图事件_Javascript_Backbone.js - Fatal编程技术网

Javascript 主干-从子视图触发父视图事件

Javascript 主干-从子视图触发父视图事件,javascript,backbone.js,Javascript,Backbone.js,我试图从父视图的子视图触发父视图事件。但似乎父视图的事件没有被触发 以下是我的代码示例: <!DOCTYPE html> <html> <head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script> <script src="http://ajax.cdnjs.com/ajax/libs

我试图从父视图的子视图触发父视图事件。但似乎父视图的事件没有被触发

以下是我的代码示例:

<!DOCTYPE html>
<html>

<head>

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
    <script src="http://ajax.cdnjs.com/ajax/libs/underscore.js/1.1.4/underscore-min.js"></script>
    <script src="http://ajax.cdnjs.com/ajax/libs/backbone.js/0.3.3/backbone-min.js"></script>

    <script>

    MySubView = Backbone.View.extend({
        id : "MySubView",

        initialize: function() {
          console.log("pro1");

          this.trigger("testGo", "test");
        }
    });

    MyView = Backbone.View.extend({
        id : "MyView",

        initialize: function() {
          console.log("pro");
          this.subview = new MySubView();
          this.subview.listenTo("testGo", this.addFoo, this);
        },

        addFoo: function() {
          console.log("ok");
          alert("ok");
        }
  });

  new MyView();

</script>

</head>

<body>
</body>
</html>

MySubView=Backbone.View.extend({
id:“MySubView”,
初始化:函数(){
控制台日志(“pro1”);
此触发器(“testGo”、“test”);
}
});
MyView=Backbone.View.extend({
id:“MyView”,
初始化:函数(){
控制台日志(“pro”);
this.subview=new MySubView();
this.subview.listenTo(“testGo”,this.addFoo,this);
},
addFoo:function(){
控制台日志(“ok”);
警报(“正常”);
}
});
新MyView();
我试图从谷歌搜索找到的许多解决方案中得到暗示,但似乎我在某个地方被打动了。我发现的一些选项包括:

1/


2/

您的
列表的用法有点偏离

签名是
object.listenTo(其他对象、事件、回调)
,因此您需要如下内容:

this.listenTo(this.subview, "testGo", this.addFoo);
它告诉
this
为事件
testGo
侦听
this.subview
,并在触发事件时调用
this.addFoo

尝试此操作

this.listenTo(this.subview, "testGo",this.addFoo);
签名:

     object.listenTo(other, event, callback)

问题是您使用的listenTo是错误的

anObject.listenTo(anotherObject, 'forSomeEvent', function () { console.log('do something'); });
因此,在您的情况下,您应该这样做:

 MyView = Backbone.View.extend({
        id : "MyView",

        initialize: function() {
          console.log("pro");
          this.subview = new MySubView();
          this.listenTo(this.subview, 'testGo', this.addFoo);
        },

        addFoo: function() {
          console.log("ok");
          alert("ok");
        }
  });
希望有帮助

触发事件:

Backbone.Events.trigger('<eventname>', {data1 to be passed with event},  {data2 to be passed with event}...);
Backbone.Events.trigger(“”,{data1与event}一起传递,{data2与event}一起传递;
听众:

Backbone.Events.bind('<eventname>', callback, context);
Backbone.Events.bind(“”,回调,上下文);

我根据您提供的建议将代码添加到。但仍面临一些问题。我也检查了文件,你是对的。明天我会再检查一下。无论如何,谢谢。@turtle嗨,我面临着同样的问题,我可以知道你已经解决了这个问题,在我的情况下,触发器可以从父视图到子视图执行,但不能以相反的方式,因为你的帖子根据你提供的建议添加了代码。但仍有一些问题需要解决。我明天会进一步检查。无论如何,谢谢。这个例子如果有一些解释会更有帮助。