2013-05-31 2 views
0

Так что у меня странная проблема, когда мои базовые события увольняются, хотя они еще не запущены. По сути, я делаю приложение редактора заметок. В самой записке пользователь может нажать cmd + b на полужирный текст или любой другой нормаль. Это затем вызывает событие, которое пузырится до AppController, который должен быть подписан на это событие и вызывать правильный метод.Магистральные события, запускаемые без триггера

Вот вид на записку, где называется триггер:

class MeetingNote.View.NoteView extends Backbone.View 
    adminTemplate: _.template($('#AdminNoteTemplate').html()) 
    normalTemplate: _.template($('#NormalNoteTemplate').html()) 
    className: 'note' 
    events: 
      'keydown'      : 'handleKeyDownsForStyling' 

    # all of the normal backbone stuff.... init/render/blah 

    handleKeyDownsForStyling: (e) -> 
      if @admin == true 
         if e.metaKey 
          switch e.which 
            when 66 then @trigger "boldSelection" 
            when 73 then @trigger "italicizeSelection" 
            when 85 then @trigger "underlineSelection" 

Тогда вот мой AppController, который связывается с событием, когда NoteView инстанциируется

class MeetingNote.View.AppController extends Backbone.View 
    template: _.template($('#MeetingNoteAppTemplate').html()) 
    className: 'MeetingNoteApp' 
    initialize: (options) -> 
      @admin = options.privilege             
      @render() 
    render: -> 
      @$el.html(@template()) 
      $('#container').append(@$el) 
      @initializeApp() 

    initializeApp: ->          
      @adminTools = new MeetingNote.View.AdminTools if @admin == true 
      notes = new MeetingNote.Collection.NotesCollection() 
      notes.fetch { 
        success: (collection) => 
          _.each collection.models, (model) => 
            note = new MeetingNote.View.NoteView {model: model, privilege: @admin} 
            @bindNoteEvents note if @admin == true 
      } 

    bindNoteEvents: (note) -> 
      note.on "boldSelection", @adminTools.boldSelection(), note 
      note.on "italicizeSelection", @adminTools.italicizeSelection(), note 
      note.on "underlineSelection", @adminTools.underlineSelection(), note 

наконец, здесь функция @ adminTools.boldSelection()

boldSelection: -> 
      console.log("yo") 

по какой-либо причине, при загрузке страницы, что console.log уволен, хотя я никогда не отправлял триггер, нажав cmd + b в заметке. Кто-нибудь может подумать, почему Backbone.Event автоматически срабатывает?

ответ

2

Это вызов функции:

@adminTools.boldSelection() 
#------------------------^^ 

Это ссылка на функцию:

@adminTools.boldSelection 

Вы должны передать on ссылка на функцию, так что он может вызвать позже. Ваш bindNoteEvents должен выглядеть следующим образом:

bindNoteEvents: (note) -> 
     note.on "boldSelection",  @adminTools.boldSelection,  note 
     note.on "italicizeSelection", @adminTools.italicizeSelection, note 
     note.on "underlineSelection", @adminTools.underlineSelection, note 
     # No parentheses here --------------------^^^^^^^^^^^^^^^^^^ 
+0

Вы рок чувак. Благодарю. –