2013-11-14 2 views
1
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-плагины, так как это увеличит загрузку мобильного браузера.

ответ

0

Просто добавьте Jquery отвязать (выкл), чтобы изменить размер окна на близком функции:

initialize : function() { 
    _.bindAll(this, "onResize");// revent the need to use _.bind 
    $(window).on('resize',this.onResize); 
}, 
close : function() { 
    $(window).off('resize', this.onResize); 
    this.remove(); 
    this.off(); 
    this.undelegateEvents(); 
} 
Смежные вопросы