2013-06-20 71 views
1

我正在嘗試將事件分配給使用骨幹事件的按鈕:。 我試了一下,如何做到這一切,但目前爲止還沒有成功。我懷疑我不能添加事件,因爲$ el的內容尚未更新(我使用下劃線加載模板)。所以我的問題是如何將事件分配給一開始沒有加載的類?模板上的Backbone.js事件

我的代碼是在Github上的回購https://github.com/PITS/bluLime-CMS

我工作的文件位於UI /腳本/視圖/ UserPage.js。

var UserView = Backbone.View.extend({ 
    initialize: function() {}, 
    render: function() { 

     var data = { 
     }; 
     var compiled = _.template(UserPage, data); 

     $.when($('.main').html(compiled)).then(function() { 
      this.$el = $(".userEdit"); 
      console.log(this.$el); 
     }); 
    }, 
events: { 
    "click .header button": "openPreview" 
}, 
openPreview: function() { 
    alert("HI"); 
} 

模板位於UI /腳本/視圖/模板/ UserPage.js

<div class="userEdit"> 
<div class="header"> 
    <h2> 
     Edit Users 
    </h2> 
    <button> 

    </button> 
</div> 
</div> 

PS:我已經tryed來解決這個問題,但我失敗了

+0

你如何創建視圖? – TAS

+0

事件將被綁定到模板呈現時的元素..你在哪裏渲染'UserView'在第一個地方 –

+0

在jquery當then語句 – Jason

回答

3

你的事件AREN在您更改this.$el之後,您不會被委託給正確的元素。而不是直接設置this.$el,請使用View.setElement。它將爲您處理事件重新授權。

此外,您需要創建一個view變量以保持對this的引用,因爲then回調中的上下文不再是視圖。

渲染功能應該是這樣的:

render: function() { 

    var data = { 
    }; 
    var compiled = _.template(UserPage, data); 
    var view = this; 

    $.when($('.main').html(compiled)).then(function() { 
     view.setElement($(".userEdit")); 
     console.log(view.$el); 
    }); 
}