0

我的事件没有自动加载。当我在 render() 方法的末尾添加 delegateEvents() 时,它工作了一段时间。我不想使用delegateEvents,但现在,即使使用delegateEvents,事件也不会加载。

我认为当时 DOM 是未知的,所以事件没有绑定,但我该如何检查(调试)呢?

看法:

class EditGroup extends BaseView
    initialize: ->
        @render()

    render: ->
        html = _.template tpl, @model.toJSON()
        @$el.html html

        for own key, options of FormConfig[@model.type]             
            options.key = key
            options.value = @model.get key
            input = new Input options
            input.on 'valuechanged', (key, value) => @model.set key, value

            @$('section.'+key).html input.$el

        @delegateEvents() # doesn't work

        @

DOM:

h2 Edit Group

section.title
section.type
section.members

button.save.btn.btn-primary(onclick="return false") Save changes

在部分类型和成员中,有预输入和渲染的选择(主干视图)。一个工作没有 delegateEvents,另一个工作。父视图中的事件(如上所示)根本不起作用。删除 for 循环没有任何区别。

4

1 回答 1

0

好的,我解决了,但我不明白工作原理。

我正在使用“视图管理器”,它注册所有视图并显示(阅读:将 html 附加到 DOM)父视图。触发新路由时会触发视图管理器的显示功能,但该路由被触发两次,一次是“route:edit”,一次是“route”。我用 router.on "all", (eventName) -> etc. 捕获它们。我认为事件绑定到 html,但是 html 被没有绑定的第二个路由器事件覆盖并附加到 DOM。问题仍然是为什么该路线被触发两次。

于 2013-01-31T14:53:32.427 回答