var MyRouter = Backbone.Router.extend({
router : {
'something' : 'method1',
'anotherthing' : 'method2'
},
method1 : function() {
if (!this.someView)
this.someView.close()
this.someView = new SomeView();
$('someElement').append(this.someView.render().el);
},
method2 : function() {
//do something
}
});
var SomeView= Backbone.View.extend({
initialize : function() {
$(window).on('resize',_bind(this.onResize, this));
},
onResize : function() {
alert('resized');
},
close : function() {
this.remove();
this.off();
this.undelegateEvents();
}
});
Приведенный выше пример моего кода. Всякий раз, когда маршрутизатор отображает представление, он отвязывает все события, связанные с существующим представлением, чтобы он удалял и создавал новое представление. Поскольку я подключил событие onResize с окном, для каждого экземпляра someView (перейдите из #something в #anotherthing и вернитесь к #something, это отменит все события в существующем this.someView и создаст новый экземпляр this.someView), он будет привязывать событие к окну, а метод onResize запускается несколько раз, даже если текущее представление не отображается (т. е. мой маршрутизатор может отображать некоторые другие представления, которые определены в методе2). Я понимаю, почему его срабатывание несколько раз, но хотите знать, есть ли способ справиться с этим в магистрали или в jQuery, а не связывать события с событием изменения размера окна?Ручка Мобильная ориентация экрана в позвоночнике
P.S. Я не использую jQuery.mobile и не хочу использовать какие-либо дополнительные javascript-плагины, так как это увеличит загрузку мобильного браузера.