【发布时间】:2011-12-14 21:16:38
【问题描述】:
我正在使用 Backbone 结合 CoffeeScript 和 Handlebars 创建一个搜索结果页面。我有两个视图:一个用于结果列表(ListView),第二个视图用于单个结果(ResultView)。简化代码:
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>
这是我的难题,您可能已经发现了:我在我的 Backbone ResultView 中定义了一个li.result,在我的模板中和。我不能做什么:
- 将 ResultView 绑定到我的模板中的
li.result,因为它在 DOM 中尚不存在 - 从我的模板中删除
li.result,因为我仍然需要它来为那些没有启用 JavaScript 的人呈现页面服务器端
有没有办法(优雅地)在实例化后将 Backbone 视图重新分配给元素?或者简单地说,我可以将 ResultView 引用到一个临时元素,渲染模板然后将其移动到ul#result 中吗?还是我看错了?
谢谢!
【问题讨论】: