第二次渲染调用后,主干网不会更新模板

时间:2019-02-07 18:11:06

标签: jquery backbone.js

我有一个subscription视图,并且我正在使用Backbone为render方法创建模板。

我认为我有一个变量:

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,并且我可以验证最后一次调用i的值为更新的值,但是,如果我更改输入值并触发render()事件,则看不到更改,如果我再次触发它,即使keydown显示模型已经更新,我也会得到。

我的渲染功能如下:

console.log(model)

但是,如果我将其包装在render: -> @$el.html @template(model) 中:

渲染:->   $(document).ready(()=>     @ $ el.html @template(模型)   )

然后我的模板正在正确更新。

我的猜测是,document.ready事件可以被触发change,因此两者都可以在同一时间执行,这一事实与onkeydown的执行混乱在一起,但是我已经尝试在render()事件上放置1秒的延迟,以确保在我进行第二次调用之前,对change的第一次调用已完成。 las,这并没有改变输出,我仍然没有更新我的模板。仅将其包装在render()中似乎可以解决此问题,但是我不知道为什么,因此我不确定这是prbolem的实际解决方案。

1 个答案:

答案 0 :(得分:1)

您似乎正在使用非委托jQuery事件侦听器,
$('.my-class').on 'keydown', (event) => @onKeydown(event)

只有在呈现视图/ dom并且匹配元素可用之前这才起作用(即使视图在绑定时在内存中,由主干创建的委派事件也将起作用)。
用新元素重新渲染视图后,它将也停止工作,除非完成重新绑定。

^骨干网提供使用委托事件侦听器(事件哈希)的简便方法的原因。使用它应该可以解决问题