【问题标题】:Backbone - Trigger the parent view event from child viewBackbone - 从子视图触发父视图事件
【发布时间】:2014-08-26 17:26:13
【问题描述】:

我正在尝试从其子视图触发父视图事件。但是似乎没有触发父视图的事件。

以下是我的代码示例:

<!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>

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

1/How to trigger an event from child view to parent view in backbonejs and requirejs

2/Backbone: How to trigger methods in a parent view

【问题讨论】:

    标签: javascript backbone.js


    【解决方案1】:

    问题是你用错了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");
            }
      });
    

    希望对你有帮助!

    【讨论】:

    • 我根据您提供的建议将代码添加到jsfiddle。但仍然面临一些问题。我也检查了文档,你是对的。我明天会检查更多。无论如何,谢谢。
    • @turtle 嗨,我也遇到了同样的问题,请问您解决了这个问题吗,在我的情况下,可以从父视图到子视图触发,但不是相反的方式你的帖子
    【解决方案2】:

    您的listenTo 使用量略有下降

    签名是object.listenTo(otherObject, event, callback),所以你想要这样的东西:

    this.listenTo(this.subview, "testGo", this.addFoo);
    

    告诉this 监听this.subview 事件testGo 并在事件触发时调用this.addFoo

    【讨论】:

      【解决方案3】:

      试试这个

      this.listenTo(this.subview, "testGo",this.addFoo);
      

      签名:

           object.listenTo(other, event, callback)
      

      【讨论】:

      • 我根据您提供的建议将代码添加到jsfiddle。但仍然面临一些问题。我明天会检查更多。无论如何,谢谢。
      • 这个例子对一些解释会更有帮助。
      【解决方案4】:

      触发事件:

      Backbone.Events.trigger('<eventname>', {data1 to be passed with event},  {data2 to be passed with event}...);
      

      听众:

      Backbone.Events.bind('<eventname>', callback, context);
      

      【讨论】:

        猜你喜欢
        • 2013-06-08
        • 2012-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多