2015-07-02 2 views
2

Работая над реализацией ACL в backbone.js, я искал метод условного запуска маршрутов на основе результата некоторой функции. Должен ли я использовать выполнение или маршрут?Условно вызывать маршруты в Backbone.js

function isRouteAuthorized(route, name) { 
 
// returns true or false depending on some conditions 
 
} 
 

 
Backbone.Router.extend({ 
 
    routes: {"": "users", "resources": "resources",}, 
 
    route: function (route, name, callback) { 
 
     if (isRouteAuthorized(route, name)) { 
 
      //follow to route 
 
      // How to achieve this ?? 
 
     } else { 
 
      //go to error route 
 
      // How to achieve this ?? 
 
     } 
 

 
    }, 
 

 
    users: function() { 
 
     //display users view 
 
    }, 
 
    resources: function() { 
 
     //display resources view 
 
    }, 
 
    error: function() { 
 
     //display error view 
 
    } 
 
});

ответ

3

Используйте метод router.navigate() использовать другой маршрут. Вам необходимо передать {trigger: true} в качестве опции, чтобы он вызывал указанный метод маршрутизатора.

Backbone.Router.extend({ 
 
    routes: {"": "users", "resources": "resources",}, 
 
    execute: function (callback, name, args) { 
 
     if (condition) { 
 
      //follow to route 
 
      callback.apply(this, args); 
 
     } else { 
 
      //go to error route 
 
      this.navigate('error', {trigger: true}); 
 
     } 
 
     return false; 
 
    }, 
 

 
    users: function() { 
 
     //display users view 
 
    }, 
 
    resources: function() { 
 
     //display resources view 
 
    }, 
 
    error: function() { 
 
     //display error view 
 
    } 
 
});

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