2015-02-13 3 views
0

У меня возникли проблемы с привязкой обработчика событий к динамически сгенерированному элементу в представлении Chaplin, и я не могу понять, что происходит. Это кажется наиболее явной возможной реализации:Обработчик событий JS/Backbone/Chaplin не запускается

var MyView = Chaplin.View.extend({ 

    /* using jQuery to bind the event because Chaplin.View.listen 
     and Chaplin.View.delegate aren't working... */ 

    render: function() { 
     Chaplin.View.prototype.render.apply(this, arguments); 
     this.$('#the-button').click(function() { console.log('clicked'); }); 
     console.log('breakpoint here'); 
    } 
}); 

В Chrome Dev Tools:

> this.$('#the-button').attr('unique-attr', 'blah'); 
< [ <button id="the-button" unique-attr="blah">Text</button>] 

> this.$('#the-button').click() 
    clicked 
< [ <button id="the-button" unique-attr="blah">Text</button>] 

Возобновить приложение, убедитесь, что мы смотрим на тот же элемент:

> $('#the-button') 
< [ <button id="the-button" unique-attr="blah">Text</button>] 

> $('#the-button').click() 
    [ no output ] 
< [ <button id="the-button" unique-attr="blah">Text</button>] 

Может ли кто-нибудь объяснить, почему обработчик события onclick для кнопки запускается в области «рендеринга», но не запускается в глобальной области? Благодарю.

ответ

0

Решено.

Я имел в виду MyView.$el.html() в виде родителя. Это возвращает внутренний код. Но обработчик событий был привязан к корню $el, который больше не отображался в документе, поэтому обработчики событий не вызывались.

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