触发的事件被接收两次.如何找到鬼视图
Triggered event is received twice. How to find ghost view?
我实例化了几次ChildView。在儿童视图中生活着一个触发器。一旦触发,就会调用父级中的函数来设置模型。问题是,触发器只触发一次(至少一次我可以看到),但父级收到两次。我知道鬼视图,但我如何找到它们?我不使用全局命名空间,我使用 require.js。
vParentView = require 'views/parentview'
class vParentView
render: ->
view1 = new ChildView()
view1.on 'data changed', @updateModel, @
view2 = new ChildView()
view2.on 'data changed', @updateModel, @
view3 = new ChildView()
view3.on 'data changed', @updateModel, @
etc...
updateModel: (data) ->
@model.set data.attr, data.options
我删除了上下文@以查看哪个视图触发了updateModel()两次,也许它们来自不同的视图,但事实并非如此。因此,同一视图会触发两次 updateModel。
编辑:ChildView的代码有点无趣:
vChildView = require 'views/childview'
class vChildView
events:
'change input.someclass': 'onChangeInput'
'change textarea.someclass': 'onChangeInput'
onChangeInput: (e) ->
@trigger 'data changed'
render: ->
html = _.template tpl
@$el.html html
@
Derick Bailey为此写了一篇非常深入的博客文章: http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/
多一点代码会有所帮助(就像@Brendan Delumpa说的那样)
在像你这样的情况下,事情发生了,你不知道为什么以及是什么触发了它们,我通常会在每个函数下放置一个console.log('')
,就像这样
class vParentView
render: ->
console.log 'vParentView -> render'
...
updateModel: (data) ->
console.log 'vParentView -> updateModel'
...
在此之后,如果我仍然不知道问题出在哪里,我将在Developer Tools
中添加一些断点并逐行执行,直到我找到哪个触发了两次相同的事情
相关文章:
- Meteor Router数据函数被调用两次
- 从MySQL数据库中获取输入数据需要两次页面刷新
- Module.start()已激发两次
- Jquery点击事件必须点击两次
- Append元素在运行两次函数后不显示
- 防止双击执行两次jQuery post请求
- 我必须点击两次才能激活任何按钮操作(离子/角度)
- 单击jQuery会激发两次
- 如何避免在树上走两次
- button.单击两次删除附加操作后不工作
- 由于$compile,Javascript(Angular)嵌套指令加载了两次
- 单击元素两次后执行操作
- AngularJs正在阻止链接被点击两次
- 为什么我的路线处理程序会触发两次
- 为什么Highchart在我的rails应用程序中加载了两次?(未捕获的Highcharts错误#16)
- 在列表中至少使用两次随机生成的nr
- 检查某个键是否按下两次
- 一次点击,两次'单击'事件已启动
- 我的所有代码在使用Webpack编译时都会运行两次
- 试图在两次之间找出半小时的时间