触发事件被接收两次。如何找鬼视图?

时间:2012-08-07 16:28:35

标签: javascript backbone.js

我将ChildView实例化几次。在ChildViews中有一个触发器。触发后,将调用父级中的函数来设置模型。问题是,触发器只触发一次(至少我可以看到),但是父母会收到两次。我知道鬼的观点,但我怎么找到它们?我不使用全局命名空间,我使用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


        @

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

你的代码会有所帮助(比如@Brendan Delumpa说)

在像你这样的情况发生事情并且你不知道为什么以及触发它们的情况下,我通常会在每个函数下放置一个console.log('')

class vParentView

    render: ->
        console.log 'vParentView -> render'
        ...

    updateModel: (data) ->
        console.log 'vParentView -> updateModel'
        ...

在此之后,如果我仍然不知道问题出在哪里,我将在Developer Tools中逐行添加一些断点,直到我发现哪个断点触发两次相同的事情