我有一个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的实际解决方案。
答案 0 :(得分:1)
您似乎正在使用非委托jQuery事件侦听器,
$('.my-class').on 'keydown', (event) => @onKeydown(event)
。
只有在呈现视图/ dom并且匹配元素可用之前这才起作用(即使视图在绑定时在内存中,由主干创建的委派事件也将起作用)。
用新元素重新渲染视图后,它将也停止工作,除非完成重新绑定。
^骨干网提供使用委托事件侦听器(事件哈希)的简便方法的原因。使用它应该可以解决问题