【发布时间】:2014-09-18 00:07:09
【问题描述】:
我已经看到这个问题出现了几次,但我自己无法解决 - 或者我不太明白答案。许多事情都在谈论使用.empty().append() 而不是.html() 以及确保始终引用视图的$el 值而不是直接访问DOM 的事情。还是没有骰子。
如果您查看这个 jsbin,您会发现更改选择框值会在第一次重新呈现包装器视图,但随后不会对后续更改执行任何操作 - 它会丢失其事件。
http://jsbin.com/fuvoba/7/edit(向任何讨厌咖啡脚本的人道歉)
知道为什么会发生这种情况吗?
非常感谢和互联网品脱,一如既往:)
编辑——我想我也会包含内联代码:
class ArchivesDropdownView extends Backbone.View
template: '<select><option>One</option><option>Two</option></select>'
initialize: () ->
console.log 'Initialised the select dropdown'
render: () ->
this.$el.find('#dropdown').empty().append @template
console.log 'Rendered the select dropdown'
return this
events:
'change select': 'updateSelect'
updateSelect: () ->
console.log 'Updated select dropdown.'
wrapperView.render()
class WrapperView extends Backbone.View
template: 'Please select: <div id="dropdown"></div><div id="random"><%=randomNum%></div>'
render: () ->
console.log 'Rendered the wrapper'
this.$el.empty().append _.template(@template)(randomNum: Math.random())
if !this.archivesDropdownView
this.archivesDropdownView = (new ArchivesDropdownView().render())
this.archivesDropdownView.render()
return this
wrapperView = new WrapperView()
$('body').empty().append wrapperView.render().$el
【问题讨论】:
标签: javascript jquery backbone.js coffeescript