Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.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,我有以下主干视图: var ParentView = Backbone.View.extend({ events: { "contextmenu .child-view" : "handleChildView" }, initialize: function () { // create child view var child = new ChildView; }, handleChildV

我有以下主干视图:

var ParentView = Backbone.View.extend({
     events: {
         "contextmenu .child-view" : "handleChildView"
     },

     initialize: function () {
        // create child view
        var child = new ChildView;
     },

     handleChildView: function () {
     }
});

var ChildView = Backbone.View.extend({

     initialize: function () {
        this.el.addClass('child-view');
     }
});
我需要在handleChildView处理程序中处理childView的contextmenu事件。但我需要获得对childView和目标DOM元素的引用


我该怎么做呢?

这对你有用吗

var ParentView = Backbone.View.extend({
     events: {
         "click .child-view .contextmenu" : "handleChildView"
     },

     initialize: function () {
        // create child view
        var child = new ChildView;
     },

     handleChildView: function () {
     }
});

var ChildView = Backbone.View.extend({
     className:'child-view'
     , initialize: function () {
        this.el.addClass('child-view');
     }
});

您可能必须在父视图(在DOM中)内渲染子视图。

我通常会尽量避免这种情况。我认为这是一种反模式,因为我认为每个视图应该只处理自己的事件

当需要在视图之间通知事件时,我使用事件总线模式

请参阅我先前发布的答案:

这是相似的

您应该在应用程序中定义事件总线。 在您的ChildView中,在发生事件时发布事件(如单击)

在家长视图中,订阅此活动:

 var ParentView = Backbone.View.extend({
   initialize: function () {
     //subscribe events:
     EventBus.on('childViewClicked', this.handleChildView, this);
   },

   handleChildView: function ([params you wanna receive]) {
   }
 });

请您解释清楚:“但是我需要获得对childView和目标DOM元素的引用”您的目标是什么?我需要在parentView中处理childView的contextmenu
 var ParentView = Backbone.View.extend({
   initialize: function () {
     //subscribe events:
     EventBus.on('childViewClicked', this.handleChildView, this);
   },

   handleChildView: function ([params you wanna receive]) {
   }
 });