0

ビューの「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 関数にバインドしようとします。しかし、うまくいきません。いくつかの方法を試しましたが、問題がどこにあるのかわかりません。ガイダンスをいただければ幸いです。

4

1 に答える 1

1

'attachmentClicked'でイベントをリッスンしていますAttachmentView:

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

しかし、そのようなイベントを引き起こすものは何も見当たりません。次のようなビューでいくつかの DOM イベント ハンドラーを設定します。

events:
    'click'     : 'attachmentClicked'
    'dblclick'  : 'openAttachment'

クリックするとattachmentClickedコールがトリガーされることを意味するだけで、'attachmentClicked'バックボーン イベントはトリガーされません。そのイベントが必要な場合は、自分でトリガーする必要があります。

attachmentClicked: ->
    @$el.addClass('selectedAttachmentView')
    @trigger 'attachmentClicked'
于 2013-05-15T18:18:59.600 に答える