Backbone - 从子视图触发父视图事件

tur*_*tle 2 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/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>
Run Code Online (Sandbox Code Playgroud)

我试图从谷歌搜索找到的许多解决方案中得到提示,但似乎我在某个地方受到了打击.我发现的一些选项是:

1/如何在backbonejs和requirejs中从子视图触发事件到父视图

2/Backbone:如何在父视图中触发方法

小智 5

问题是你使用listenTo错了.

anObject.listenTo(anotherObject, 'forSomeEvent', function () { console.log('do something'); });
Run Code Online (Sandbox Code Playgroud)

所以,在你的情况下,你应该这样做:

 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");
        }
  });
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你!