2011-10-25 17 views
22

我有模型發佈和收集帖子。並且要用<select id="multi" multiple="multiple">中的所有帖子列表製作表格。所以,我必須做出覽我#multi內部渲染眼前這個模板:Backbone.js關閉由div中的包裝渲染

<option value=""><%= title %></option> 

但最後我把它包裹着股利。有沒有解決方案不包裝這個模板<div>

回答

32

如果您沒有爲視圖(在類中或實例化過程中)定義el(或tagName),視圖將放置在div標籤內。 http://documentcloud.github.com/backbone/#View-el

var PostView = Backbone.View.extend({ 
    tagName: 'option' 
}); 

UPDATE

開始v0.9.0,骨幹有view.setElement(元),以完成這件事。

var PostView = Backbone.View.extend({ 
    initialize: function() { 
     var template = _.template('<option value=""><%= title %></option>'); 
     var html = template({title: 'post'}); 
     this.setElement(html); 
    } 
}); 
+1

我也試過這種方法,但是看不到在這個

+0

在你的視圖中,你可以使用jquery設置值$(this.el).attr('value','something');' – kreek

+4

甚至'this.el.value ='something''離開jQuery這是需要:) –

18

如果你不希望有看法環繞你的HTML,你就必須做幾件事情:

  1. 在新el
  2. 更換 this.el完全
  3. 呼叫delegateEvents
render: function(){ 
    var html = "some foo"; 
    this.el = html; 
    this.delegateEvents(this.events); 
} 

由於Backbone生成div或其他標籤(根據您的tagName設置爲視圖),您必須完全替換它。這很容易做到。但是,當您這樣做時,由於Backbone使用jQuery的delegate進行聯繫,所以您失去了已聲明的事件。要重新啓用您的聲明事件,請致電delegateEvents並傳入您的活動聲明。

結果是,您的view.el將是您想要的<option>標記,除此之外沒有別的。

+0

謝謝你的幫助,Derick。我將在未來的項目/ – BazZy

+0

中使用您的建議,您不必將this.events傳遞給delegateEvents,它將默認爲此。 – troynt

+8

在最新版本的BB中有一個函數 - [view.setElement(html)](http://documentcloud.github.com/backbone/#View-setElement) – zihotki