2012-05-15 95 views
1

我希望這段代碼足以理解這個問題。
問題是下面,Backbone:如何將myView渲染成DOM

1)我加載MyView的首次,
2)如果我點擊div#myId,功能myAction被觸發預期只是一個時間。
3)如果調用方法removerendering另一個視圖,功能myAction被觸發兩次。
4)然後,如果我重複步驟3)功能myAction被觸發三次,依此類推。

可能是什麼問題?

var myView = Backbone.View.extend({ 

    // The DOM events specific to an item. 
    events: { 
     "click #myId" : "myAction" 
    }, 

    myAction: function() { 
     // some code 
    }, 

    remove: function remove() 
    { 
     $(this.el).html(""); 
    } 

}); 

P.S:
其中創建於每個渲染調用的DOM是確定的。

+0

很可能我的誤解,但是爲什麼會視圖時最初加載你的'click'事件觸發?您是否在某處手動觸發「咔嗒」事件? –

+0

我還不夠清楚。請讓我解釋一下。第一次加載視圖後,然後點擊div#myId函數myAction被調用一次。 – underscore666

回答

1

通常這裏的問題在於,您處於某種狀態,您需要一遍又一遍地重新呈現預定義元素的視圖,而沒有正確銷燬視圖,從而導致「殭屍」視圖。如果您在視圖中定義了el,並繼續呈現上述視圖,則最終會重複您的事件。

jQuery中

爲例,如果你這樣做了幾次:

$(document).bind('click',function(){ console.log("document.click"); }); 
$(document).bind('click',function(){ console.log("document.click"); }); 
$(document).bind('click',function(){ console.log("document.click"); }); 

將三次觸發事件。

仔細看看你如何初始化你的視圖,最重要的是你如何渲染/重新渲染它們。

你有你的刪除方法做的是沿着這些路線的更多的東西

remove: function remove() 
{ 
    this.$el.remove(); 
    this.$el.unbind(); 
} 
+0

感謝您的回覆非常明確。但問題依然存在。奇怪的是:如果我從js控制檯運行命令'$ el.unbind();'這個事件會持續下去。如果我運行'$ el.bind(「click」,function(){some code});'兩個事件(BB +新函數)被觸發。看起來綁定是有效的,而不是綁定的。 – underscore666

+0

更新你的原始問題與你如何渲染myView進入DOM,我會看看 –

+0

我確實改變了標題。謝謝。 – underscore666