2013-03-11 3 views
1

Событие jumpToWave получает только один раз, я не понимаю, почему.Событие Backbone.View срабатывает только один раз

Это мое мнение:

var WaveModalView = Backbone.View.extend({ 

template:_.template($('#tpl-wave-modal').html()), 

events: { 
    'hidden': 'remove', 
    'click .jumpToWaveBtn':'jumpToWave' 
}, 
    jumpToWave:function(e){ 
     e.preventDefault(); 
     console.log("JMP") 
     var marker = this.model.collection.markers[this.model.id]; 
     map.panTo(marker.getPosition()); 
     bounceMarker(marker,1750); 
    }, 
render:function() { 
    var model = this.model; 
    var that = this; 
    $(this.el).html(this.template(model.toJSON())); 

    if(model.get('waveReviews').length > 0){ 
     var reviewList = new WaveReviewList({model: model}); 
     $('#waveReviews' + model.id).html(reviewList.render().el); 
    } 

    this.$("#waveSync" + model.id).click(function(e){ 
     e.preventDefault(); 
     if(window.me){ 
      requestSyncWave(model.id,function(data){ 
       window.me.fetch(); 
      }); 
     } 
    }); 

    this.$("#waveEdit" + model.id).click(function(e){ 
     e.preventDefault(); 
     window.waveUnderEdit = model; 
     $(that.el).children(":first").modal('hide'); 
     openWaveEditModal(model); 

    }); 

    return this; 
} 

}); 

Это соответствующая кнопка в шаблоне:

<button class="btn btn-info jumpToWaveBtn" data-dismiss="modal" aria-hidden="true">Auf Karte 
      anzeigen</button> 

У меня есть несколько модальности к тому времени, я нажимаю кнопку. Событие запускается для каждого модала только один раз, после чего «JMP» больше не регистрируется.

ответ

3

я не вижу свой код, вызывая render на WaveModalView, но я подозреваю, что проблема в том, что вы звоните render() откуда-то еще, что, в свою очередь, вызывает $(this.el).html(...), который заменяет содержимое элемента отображения вида, и вновь вставленное содержимое не имеет событий, связанных с его элементами.

Если это действительно проблема, вы можете решить ее, добавив this.delegateEvents() в конце вашей функции render().

Например, проверить этот вопрос и ответы: Why are events not firing after the second render in Backbone.js?

+0

, что сделал это, спасибо. Расскажите, пожалуйста, в делегатах-участниках? – MJB

+0

Вы проверили официальную документацию на 'delegateEvents()'? http://backbonejs.org/#View-delegateEvents –

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