2012-01-19 3 views
4

Есть ли в Backbone.Router события как до, так и после выполнения маршрутизации? Мое приложение работает с jQuery.mobile и звонит в $ .mobile.changePage, который был необходим до того, как маршрут был выполнен, и у контроллера есть доступ к текущей странице на странице $ .activePage. Когда действие контроллера будет завершено, я должен запустить событие create на документе, чтобы получить «усиление» новыми созданными элементами $ .mobile. я сделал это, заменив loadUrlСобытия магистральных маршрутизаторов

Backbone.history.loadUrl = (function(old ){ 
    return function() { 
     Router.trigger("all:before"); 
     old.apply(Backbone.history, arguments); 
     Router.trigger("all:after"); 
    } 
})(Backbone.history.loadUrl ); 



//Router.initialize 
initialize: function() { 
    this.bind("all:before", function() { 
     $.mobile.changePage(window.location.hash.split("/")[0] || "home", { changeHash:false}); 
    }); 

    this.bind("all:after", function() { 
     $.mobile.activePage.trigger('create'); 
    }); 
    } 

Есть, возможно, некоторые встроенные в подобных мероприятиях?

+1

по теме, но я люблю, как вы обернули 'функцию Backbone.history.loadUrl'. Действительно чистая! – surjikal

ответ

9

нет до и после события в Backbone.Router на данный момент.

версия 0.5.3 поддерживает следующие события маршрутизатора (all events here)

"маршрут: [имя]" (маршрутизатор) - когда один из маршрутов маршрутизатора совпал.

не уверен в том, какой релиз будет, но событие общий маршрут разрабатывается, в багажнике GitHub фиксации #419 имеет эту функцию, но он не вышел в новой версии пока

там Allready сообщили (идея) для события до события, проверьте здесь github issue on that.

так, то, прежде чем событие еще не там, после того, как событие наступит спустя некоторое время, если вы действительно уже нужен после того, как событие, есть способ, вы можете поместить его в себя, путем связывания с вместо этого «все», он захватывает все события, включая все события «route: routeename». то просто разделите имя события, и если он начнется с маршрута, у вас будет общее событие маршрута. (Это, конечно, может быть удален и изменен, если после того, как событие выпущен в одном из выпусков Backbone в)

this.bind('all', function (trigger, args) { 
       var routeData = trigger.split(":"); 
       if (routeData[0] === "route") { 
        // do whatever here. 
        // routeData[1] will have the route name 
       } 
     }); 
+0

Просто голова, событие «все» (во всех случаях, когда я видел срабатывание) в последний раз. Таким образом, в случае маршрутов это будет больше похоже на событие after. – KTastrophy

+1

базовая версия 1.0 имеет событие «маршрут» – drogon

+2

Событие «маршрут» не срабатывает до следующего – Danny

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