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 пытается прослушать метод привязанного только что созданного объекта и привязать его к этому классу. Однако это не работает. Я пробовал несколько способов и не знаю, где моя проблема. Руководство будет высоко оценено.

ответ

1

Вы слушаете для 'attachmentClicked' событий на вашем AttachmentView:

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

, но я не вижу ничего, что вызовет такое событие. Настройка некоторых обработчиков событий DOM в представлении, как это:

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

просто означает, что щелчок вызовет attachmentClicked вызов, он не будет инициировать событие 'attachmentClicked' Backbone; если вы хотите это событие, вам придется его инициировать самостоятельно:

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

Hot dang. Я не понимал, что события не создают базовые события. Я предполагал, что это будет обрабатывать событие DOM и создать магистральное событие. Большое спасибо. Вот и все. –

Смежные вопросы