Backbone 在第二次渲染调用后不更新模板
Backbone doesn't update the template after a second render call
我有一个 Backbone
视图,我正在使用 Handlebars
为渲染方法创建模板。
在我看来我有一个变量:
model = [
{key: '1', value: 'a'},
{key: '2', value: 'b'},
{key: '3', value: 'c'},
{key: '4', value: 'd'}
]
我显示了几个输入并有以下监听事件:
'change input' : 'onInputChange'
$('.my-class').on 'keydown', (event) => @onKeydown(event)
所以这工作正常。当触发 change
事件时,我有一些逻辑可以根据新输入的值更新模型。这就是问题所在。
两个事件都在调用 render()
,我可以验证最后一次调用 i 是否具有更新后的值,但是如果我更改输入值并触发 keydown
事件,我看不到更改,如果我再次触发它,那么我会得到,即使 console.log(model)
显示模型已经更新。
我的渲染函数如下所示:
render: ->
@$el.html @template(model)
但是,如果我将其包装在 document.ready
中:
渲染:->
$(文档).ready(() =>
@$el.html @模板(模型)
)
那么我的模板正在正确更新。
我的猜测是 change
事件可以被触发 onkeydown
所以两者几乎同时执行的事实与 render()
的执行混淆了,但是我我试图在 change
事件上延迟 1 秒,以确保在我进行第二次调用之前对 render()
的第一次调用已经完成。唉,这并没有改变输出,我仍然没有更新我的模板。仅将其包装在 document.ready
中似乎可以解决问题,但我不知道为什么,因此我不确定这是 prbolem 的实际解决方案。
您似乎在使用非委托 jQuery 事件侦听器,
$('.my-class').on 'keydown', (event) => @onKeydown(event)
.
在呈现 view/dom 并且匹配元素可用之前,这不会起作用(即使在绑定时视图在内存中,由 backbone 创建的委托事件也会起作用)。
一旦使用新元素重新呈现视图,它也会停止工作,除非重新绑定完成。
^ backbone 提供使用委托事件侦听器(事件哈希)的简单方法是有原因的。使用它应该可以解决问题
我有一个 Backbone
视图,我正在使用 Handlebars
为渲染方法创建模板。
在我看来我有一个变量:
model = [
{key: '1', value: 'a'},
{key: '2', value: 'b'},
{key: '3', value: 'c'},
{key: '4', value: 'd'}
]
我显示了几个输入并有以下监听事件:
'change input' : 'onInputChange'
$('.my-class').on 'keydown', (event) => @onKeydown(event)
所以这工作正常。当触发 change
事件时,我有一些逻辑可以根据新输入的值更新模型。这就是问题所在。
两个事件都在调用 render()
,我可以验证最后一次调用 i 是否具有更新后的值,但是如果我更改输入值并触发 keydown
事件,我看不到更改,如果我再次触发它,那么我会得到,即使 console.log(model)
显示模型已经更新。
我的渲染函数如下所示:
render: ->
@$el.html @template(model)
但是,如果我将其包装在 document.ready
中:
渲染:-> $(文档).ready(() => @$el.html @模板(模型) )
那么我的模板正在正确更新。
我的猜测是 change
事件可以被触发 onkeydown
所以两者几乎同时执行的事实与 render()
的执行混淆了,但是我我试图在 change
事件上延迟 1 秒,以确保在我进行第二次调用之前对 render()
的第一次调用已经完成。唉,这并没有改变输出,我仍然没有更新我的模板。仅将其包装在 document.ready
中似乎可以解决问题,但我不知道为什么,因此我不确定这是 prbolem 的实际解决方案。
您似乎在使用非委托 jQuery 事件侦听器,
$('.my-class').on 'keydown', (event) => @onKeydown(event)
.
在呈现 view/dom 并且匹配元素可用之前,这不会起作用(即使在绑定时视图在内存中,由 backbone 创建的委托事件也会起作用)。
一旦使用新元素重新呈现视图,它也会停止工作,除非重新绑定完成。
^ backbone 提供使用委托事件侦听器(事件哈希)的简单方法是有原因的。使用它应该可以解决问题