0

我实例化了 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


        @
4

2 回答 2

1

Derick Bailey 就此写了一篇非常深入的博文:http: //lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/

于 2012-08-07T16:48:35.057 回答
0

多一点你的代码会有所帮助(就像@Brendan Delumpa 说的)

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

class vParentView

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

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

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

于 2012-08-07T19:15:01.193 回答