如何通过BackboneJS中的多个子视图级别处理事件

时间:2013-05-11 11:44:12

标签: javascript events backbone.js views marionette

是否有方便的方法从/向Backbone中的多个级别的子/父视图投掷/捕获(自定义)事件?

让我解释一下我的情况。我正在捕捉“keydown”事件并检查是否应该在父级别上进行某些交互。如果没有,那么我正在调用childView函数。我的BaseView看起来像这样:

var BaseView = Backbone.View.extend({

  keydown: function(e){
    return this;
  },

});

它工作正常,直到我没有尝试抛出其他customEvents与childViews的childViews进行交互。顺便说一下,不知道自己的存在。

我不能简单地做下面的事情,因为我的父母甚至不知道subView的所有childViews。我正在尝试做这样的事情:

例如。模糊subChildViews输入

Parent.subview.subsubview.trigger('blurInput');

我确信我的事件推动方式错误 - “keydown” - 方法, 有人能指出我正确的方向吗?

修改

原始的BackboneJS并不是真的为这样的东西构建,但是那里有一个模块。 MarionetteJS是我的解决方案,它提供了我想要的一切。子视图,模块化逻辑和优化的交叉视图事件系统。

smashingmagazine.com

上有一个很棒的入门教程

1 个答案:

答案 0 :(得分:1)

那么在骨干形式的划痕中没有方便的解决方案,因为嵌套视图不是有任何办法。 我可以建议你设置父母关系(所以每个视图都知道它的父母)而不是父母知道所有的子视图,只要视图是一个事件发射器默认玩具可以做这样的事情[伪代码] :

父视图:

 var BaseView = Backbone.View.extend({

  keydown: function(e){
    this.trigger("custom.keydown");
    return this;
  },

});

子视图:

var ChildView = Backbone.View.extend({

  initialize:function(){
       this.parent.on("custom.keydown",this.keydown,this);
  }

});