我使用Backbone與CoffeeScript和Handlebars結合創建搜索結果頁面。我有兩個視圖:一個用於結果列表(ListView),第二個視圖用於單個結果(ResultView)。簡化代碼:將骨幹視圖重新分配給新創建的DOM元素
ListView = Backbone.View.extend
el: $("ul#results")
...
addItem: (result) ->
resultView = new ResultView({
model: result
})
resultView.parentView = this
this.el.append(resultView.render().el)
ResultView = Backbone.View.extend
tagName: "li"
className: "result"
events:
...
簡短說明:
- ListView控件被分配到
ul#results
- 當結果添加到列表視圖,創建ResultView,有其父的知識和渲染本身
- 對於ResultView元素
li.result
被創建(默認主幹行爲)
這是(簡體)我使用呈現搜索結果的模板:
<li class="result">
<h1>
<a href="{{link}}">{{title}}</a>
</h1>
<p>{{snippet}}</p>
</li>
這裏是我的難題,你可能已經發現了自己:我定義我的骨幹ResultView在li.result
,和我的模板。我不能做什麼:
- 綁定ResultView到模板中的
li.result
,因爲它還沒有在DOM - 存在拆除模板中的
li.result
,因爲我還需要它爲那些沒有啓用JavaScript的頁面渲染頁面服務器端
有沒有一種方法(優雅地)重新分配一個骨幹視圖到一個元素被實例化後?或者簡單地說,我可以引用ResultView到一個臨時元素,渲染模板,然後將它移動到ul#result
?或者我以錯誤的方式看待它?
謝謝!
非常感謝!我實際上將你的答案與Scott Harvey的答案結合起來;我使用渲染觸發器,重新分配我的新`li.result`,然後使用@delegateEvents確保事件被綁定。 – Phortuin 2011-12-20 10:34:58