Events 用主干线收听事件的问题

Events 用主干线收听事件的问题,events,backbone.js,coffeescript,backbone-events,event-binding,Events,Backbone.js,Coffeescript,Backbone Events,Event Binding,我正在尝试侦听在另一个对象中调用视图的“attachmentClicked”函数的时间。以下是最初调用事件的类: class AttachmentView extends AttachmentViewerView template: _.template($('#AttachmentViewTemplate').html()) className: "attachmentView" # # initialize -> # initiali

我正在尝试侦听在另一个对象中调用视图的“attachmentClicked”函数的时间。以下是最初调用事件的类:

class AttachmentView extends AttachmentViewerView
    template: _.template($('#AttachmentViewTemplate').html())
    className: "attachmentView"
    # 
    # initialize ->
    # 
    initialize: ->
        console.log "AttachmentView initialized"
        @render()

    events: {
        'click'     : 'attachmentClicked'
        'dblclick'  : 'openAttachment'
    }

    # 
    # render ->
    # 
    render: ->
        @$el.html(@template(@model.toJSON()))
        $('div.attachmentViewerView').append(@el)
        # @bind 'event', method

    # 
    # attachmentClicked ->
    # 
    attachmentClicked: ->
        @$el.addClass('selectedAttachmentView')
这个对象在单击时调用
attachmentClicked
,现在在创建这个对象的另一个类中,我正在尝试侦听该事件。这是那节课

class AttachmentViewerView extends AttachmentAppController 

    template: _.template($('#AttachmentViewerTemplate').html())
    className: "attachmentViewerView"

    #
    # initialize ->
    # 
    initialize: (options) ->
        console.log "AttachmentViewer initialized"
        @office = options.office
        @ticket = options.ticket
        @attachmentViews = []

        @render()

    # 
    # render ->
    # 
    render: ->
        @$el.html(@template())
        # Append to fileViewer Div
        $('#attachmentViewerWindow').append(@el)
        @renderFiles()

    # 
    # bindEvents ->
    # 
    bindEvents: (view) ->
        @listenTo view, 'attachmentClicked', @attachmentClicked


    # 
    # renderFiles ->
    # 
    renderFiles: ->
        @attachments = new AttachmentCollection({@office, @ticket})
        @attachments.fetch({
            success: (collection) =>
                _.each collection.models, (model) =>
                    # Create the attachment views and bind events right away
                    @bindEvents new AttachmentView({model: model})
            })

    # 
    # attachmentClicked ->
    # 
    attachmentClicked: (attachment) ->
        console.log( @ )
        @$el.find('.selectedAttachmentView').removeClass('selectedAttachmentView') unless @selected == attachment
        @selected = attachment
因此,当创建这个类时,它最终会调用renderFiles,从服务器获取文件,然后为每个返回的模型创建一个视图,并将其作为参数调用bindEvent


然后bindEvent尝试侦听新创建项的attachmentClicked方法,并将其绑定到此类attachmentClicked函数。但是,它不起作用。我试过几种方法,但不确定我的问题出在哪里。非常感谢您的指导。

您正在收听您的
附件视图上的
'attachmentClicked'
事件:

bindEvents: (view) ->
    @listenTo view, 'attachmentClicked', @attachmentClicked
但我看不出有什么会引发这样的事件。在如下视图中设置一些DOM事件处理程序:

events:
    'click'     : 'attachmentClicked'
    'dblclick'  : 'openAttachment'
仅仅意味着单击将触发一个
attachmentClicked
调用,它不会触发一个
'attachmentClicked'
主干事件;如果您想要该事件,则必须自己触发:

attachmentClicked: ->
    @$el.addClass('selectedAttachmentView')
    @trigger 'attachmentClicked'

热腾腾的。我没有意识到这些事件并没有创建主干事件。我假设它将处理DOM事件并创建主干事件。谢谢。就这样。