第 二 次 渲染 调用 后 , Backbone.js 不会 更新 模板

nr9pn0ug  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(172)

我有一个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。

wlsrxk51

wlsrxk511#

您似乎使用了一个非委托的jQuery事件监听器,
$('.my-class').on 'keydown', (event) => @onKeydown(event) .
这在视图/dom被呈现并且匹配的元素可用之前不会起作用(即使绑定时视图在内存中,由 Backbone.js 创建的委托事件也会起作用)。
一旦视图用新元素重新呈现,它也将停止工作,除非重新绑定完成。
^ Backbone 网提供了使用委托事件监听器(事件散列)的简单方法是有原因的。使用它应该可以解决问题

相关问题