Marionette.js - ItemView获取父区域引用

时间:2013-09-17 01:52:46

标签: javascript backbone.js marionette

Marionette.js Regions有一个close事件,他们可以在Regions之一判断他们是否自己关闭了其中一个子视图。

我遇到的问题是,如果子视图自身调用close,则不会触发此close事件。

请参阅以下内容:

var SubView = Marionette.ItemView.extend({

  // suppose close is called from the region item itself...
  internalClose: function() {
    this.close();
  },
});

var Layout = Marionette.Layout.extend({

  template: '<div class="region1"></div>',

  regions: {
    region1: '.region1',
  },

  onRender: function() {

    this.region1.show(new SubView());
    // When the SubView calls its own close, 
    // region1 does not register a close event.

    this.region1.on('close', function() {
      // self destruct or something exciting...
    });
  },
});

如何让ItemView与布局进行通信,并告诉它自己关闭(例如通过点击ItemView中的退出按钮等)。当Layout关闭时,我需要ItemView来操纵自己的附加DOM。

1 个答案:

答案 0 :(得分:3)

将监听器附加到区域的show事件并收听当前视图的close事件:

var region = this.region1;

region.on('show', function() {
    region.currentView.on('close', function() {
        // this message will cause the layout to self destruct...
     });
     // NOTE: You won't have to clean up this event listener since calling 
     //       close on either the region or the view will do it for you.
});

您可以这样做,而不是在区域内收听close,因为这只是发出currentView的结束信号。