触发的事件被接收两次.如何找到鬼视图

Triggered event is received twice. How to find ghost view?

本文关键字:两次 何找 视图 事件      更新时间:2023-09-26

我实例化了几次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中添加一些断点并逐行执行,直到我找到哪个触发了两次相同的事情