2016-02-12 22 views
0

時觸發我有一個Backbone觀點,我已經附加了一些事件,以它:防止後臺事件的點擊疊加DIV

var View1 = Backbone.View.extend({ 

    initialize: function() { 
     // ... 
    }, 

    events: { 
     "touchend .elem": "callback", 
     // ... 
    } 

    render: function() { 
     // ... 
    } 

}); 

現在,當我渲染View1另一個視圖(View2)呈現第一,這有覆蓋View1元素的div。 這div有以下CSS屬性:

.overlay { 
    background-color: rgba(0, 0, 0, 0.22) !important; 
    z-index: 500; 
    width: 100%; 
    height: 100%; 
    top: 0; 
    left: 0; 
    position: fixed; 
} 

View2幾秒鐘後消失。 問題是,如果我在覆蓋圖消失之前單擊它,覆蓋圖下的事件就會被觸發,所以在我的示例中,將會調用callback函數。

我試圖這樣做是爲了一個假事件附加到View2

var View2 = Backbone.View.extend({ 

    initialize: function() { 
     // ... 
    }, 

    events: { 
     // ... 
     "touchend .overlay": "overlayCallback" 
    }, 

    overlayCallback: function(event) { 
     if (event) { 
      event.preventDefault(); 
      event.stopImmediatePropagation(); 
      event.stopPropagation(); 
     } 
     return false; 
    }, 

    render: function() { 
     // ... 
    } 

}); 

,但它並沒有解決我的問題。

如何防止View1觸發事件當用戶點擊View2覆蓋div

感謝

+0

我們不知道您的DOM的結構。你應該提供一個[mcve] –

+0

@TJ,我認爲這不是必須的,因爲我只需要一種方法來禁用覆蓋div下的所有div的觸摸事件。謝謝 – Frank

+0

這完全取決於你在*下的意思。它可以*在眼睛下方,只是在視覺上。我們需要知道DOM中這些元素的關係,以及繼續進行的整個CSS。總之一個[mcve] –

回答

0

假設視圖1調用視圖2,你可以做到這一點,如:

  1. 添加您的視圖1作爲參數傳遞給View2s初始化法
  2. 然後,用undelegateEvents - 一種方法,在規定 backbonejs- docs在view2的初始化方法中暫時禁用 view1的事件。
  3. 關閉View2,使用delegateEvents重新授權 您的活動 - View1中的方法或在view1中創建 自定義方法,並將其從view2的引用調用到view1。