2014-12-05 2 views
1

У меня есть представление, которое отображается в маршрутизаторе, но после его рендеринга ни одно из событий не будет срабатывать. Ниже мой взгляд:Магистральные события не срабатывают после визуализированного представления

function(Global, util, user, userMenu) { 
     /*userMenu is the template*/ 
     var UserMenuView = Backbone.View.extend({ 
      initialize: function() { 
       this.template = _.template(userMenu); 
      }, 
      render: function() { 
       var container = $(this.el); 
       container.empty().append(this.template()); 
       return container; 
      }, 
      events: { 
       "tap #about-user-menu" : "launchAbout", 
       "keydown #about-user-menu": function(e) { if (e.which === 13) this.launchAbout(e); }, 
       "tap #help-user-menu" : "launchHelp", 
       "keydown #help-user-menu": function(e) { if (e.which === 13) this.launchHelp(e); }, 
       "tap #resources-user-menu" : "launchResources", 
       "keydown #resources-user-menu": function(e) { if (e.which === 13) this.launchResources(e); }, 
      }, 
      launchAbout: function(e){ 
       e.preventDefault(); 
       alert("about"); 
      }, 
      launchHelp: function(e){ 
       e.preventDefault(); 
       alert("help"); 
      }, 
      launchResources: function(e){ 
       e.preventDefault(); 
       alert("resources"); 
      } 
     }); 
     return UserMenuView; 
    } 

Это, как я рендеринг мнения в маршрутизаторе:

showUserMenu: function(){ 
    var userMenu = new UserMenuView(); 
    userMenu.render(); 
} 
+0

шоу код, как вы добавляете в родительский вид – StateLess

+0

@ aktiv-coder извините, m фактически рендеринг в маршрутизаторе. Я отредактировал вопрос, чтобы показать это. Я пробовал ваш ответ, но это не сработало. –

+0

Вы никогда не добавляете 'el' вида на страницу и не передаете' el' в представление. –

ответ

1

this.template() в коде возвращает только HTML строки, вызывая проблемы.

так что вы должны попытаться добавить el элемент зрения, которая имеет HTML строку, а также Event bindings

теперь на ваш взгляд назначить HTML для el

render: function() { 
      this.$el.html(this.template()); 
      return this; 
      } 

в маршрутизаторе

$('#menu').append(UserMenuView.render().el); 
Смежные вопросы