Событие Backbone.View срабатывает только один раз

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

Это мой взгляд:

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» больше не регистрируется.


person MJB    schedule 11.03.2013    source источник


Ответы (1)


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

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

Например, проверьте этот вопрос и ответы: ">Почему события не запускаются после второго рендеринга в Backbone.js?

person Bruno Reis    schedule 11.03.2013
comment
что получилось, спасибо. Не могли бы вы уточнить в delegateEvents? - person MJB; 11.03.2013
comment
Вы проверили официальную документацию по delegateEvents()? backbonejs.org/#View-delegateEvents - person Bruno Reis; 11.03.2013