我有一个Backbone
视图,我正在使用Handlebars
为render方法创建模板。
在我看来我有一个变数:
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)
但是,如果我将其 Package 在document.ready
中:
在此基础上,本文提出了一种新的基于XML的文档管理方法。
然后我的模板会正确更新。
我的猜测是,change
事件可以由onkeydown
触发,因此几乎同时执行这两个事件会干扰render()
的执行,然而,我尝试在change
事件上设置1秒的延迟,以确保在进行第二次调用之前,对render()
的第一次调用已经完成。我仍然没有得到我的模板更新。只有 Package 在document.ready
似乎解决了这个问题,但我不知道为什么,因此我不确定这是实际的解决方案的prbolem。
1条答案
按热度按时间wlsrxk511#
您似乎使用了一个非委托的jQuery事件监听器,
$('.my-class').on 'keydown', (event) => @onKeydown(event)
.这在视图/dom被呈现并且匹配的元素可用之前不会起作用(即使绑定时视图在内存中,由 Backbone.js 创建的委托事件也会起作用)。
一旦视图用新元素重新呈现,它也将停止工作,除非重新绑定完成。
^ Backbone 网提供了使用委托事件监听器(事件散列)的简单方法是有原因的。使用它应该可以解决问题