2014-09-22 3 views
0

У меня есть основное приложение с subapps:
main_app
| -mainRouter.js
| -sub_app
        | -subAppRouter.jsBackbone.js маршрут перехватчики

subAppRouter.js расширяет mainRouter .js. subAppRouter.js имеет обработчик маршрута (например,/app1/item /). У меня нет доступа к subAppRouter.
Вот что мне нужно:
В mainRouter Я хочу создать маршрутизацию, которая будет обрабатывать все URL-адреса из всех приложений. Он должен обрабатывать маршрут, выполнять некоторую проверку, и в одном случае он должен продолжить увольнение обработчика из subAppRouter для этого URL-адреса, иначе он должен сделать перенаправление (например,/app2/somepage).

Может ли кто-нибудь помочь мне найти лучшее решение, как это сделать?
Другими словами: как реализовать шаблон перехватчика через маршрутизатор в позвоночнике?

Благодаря

ответ

0

я буду перефразировать ваш вопрос в пунктах

1- у вас есть основной маршрутизатор для общих маршрутов

2- у вас есть специализированный маршрутизатор для некоторых приложений маршрутов

3 - вам нужен ваш основной маршрутизатор, чтобы выбрать погоду, чтобы обработать маршрут, только перебросьте его на дополнительный маршрутизатор

для этого я предлагаю следующая

1- создать главный маршрутизатор, расширяя Backbone.Router

var mainRouter = Backbone.Router.extend({ 
    routes:{ 
     'index':'loadIndex', 
     //other common app routes...... 
    }, 
    loadIndex: function(){ 
     //code to load index 
    } 
}); 

2- затем определить вспомогательный маршрутизатор для приложения, расширяя основной маршрутизатор, но обратите внимание, как определено маршруты

var subAppRouter = mainRouter.extend({ 
    initialize: function(){ 
     // here we will extend the base routes to not lose default routing, and add app special routing 
     _.extend(this.routes, { 
      'subApp/index': 'subAppIndex' 
     }); 
    }, 
    subAppIndex: function(){ 
     // code to load sub app index 
    }, 
}); 

, то вы можете использовать дополнительный маршрутизатор, который также будет содержать базовую маршрутизацию

0

Here - хорошая статья о подпрограмме. Это отлично работает для меня.

Включите подмаршрут Js LIB в вашем проекте:

<script type="text/javascript" src="backbone.subroute.min.js"></script> 

HTML пример тела:

<a href="#app1/">App1</a> 
<a href="#app2">App2</a> 
<div class="app"> 
</div> 

JS Пример кода:

var MyApp = {}; 
MyApp.App1 = { 
    Router: Backbone.SubRoute.extend({ 
     routes: { 
      "": "init", 
      "sub1": "sub1" 
     }, 
     init: function () { 
      console.log("app1"); 
      $(".app").html($("<h1 />", {text: "App1"})); 
      $(".app").append($("<a/>", {href: "#app1/sub1", text: "sub1"})); 
     }, 
     sub1: function () { 
      console.log("sub1"); 
      $(".app").append($("<h2 />", {text: "sub1"})); 
     } 
    }) 
}; 
MyApp.Router = Backbone.Router.extend({ 
    initialize: function () { 
     if(!MyApp.Routers){ 
      MyApp.Routers = {}; 
     } 
    }, 
    routes: { 
     "app1/*subroute": "invokeApp1Router", 
     "app2": "app2" 
    }, 
    invokeApp1Router: function (subroute) { 
     if(!MyApp.Routers.App1){ 
      MyApp.Routers.App1 = new MyApp.App1.Router("app1/"); 
     }    
    }, 

    app2: function () { 
     console.log("app2"); 
     $(".app").html($("<h1 />", {text: "App2"})); 
    } 
}); 

$(document).ready(function () { 
    new MyApp.Router(); 
    Backbone.history.start(); 
}) 
Смежные вопросы