2013-03-28 5 views
1

Итак, я немного дилемма с дизайном маршрутизации Backbone и пытаюсь понять, что другие люди думают или пытались сделать для решения этой проблемы.Магистральная маршрутизация для модульного и множественного просмотра

Основная проблема заключается в том, что я пишу приложение с несколькими представлениями и вложенными представлениями в каждом из представлений и избегая использования одного магистрального маршрутизатора для управления состоянием этих представлений и вложенными представлениями.

Пример задачи:

Backbone.Router.extend({ routes: 
'view1' : ..., 'view2Nested': ..., 
'View2NestedNested' ...}); 

Посмотреть планировку:

  • View1
    • View1Nested
  • View2
    • View2Nested
    • View2NestedNested

В этой конфигурации маршрутизатор должен теперь о View2NestedNested для того, чтобы послать ему какую-либо информацию действий, возможно, это означает, что главный маршрутизатор должен содержать ссылку на представление или знать о view2 и получить ссылку на view2Nested и спросить это представление для view2NestedNested.

ответ

0

Мой подход создает представление со ссылкой на его родителя.

Так в основном ваши взгляды будут выглядеть следующим образом:

var ViewAA = Backbone.View.extend({ 
    initialize: function(options) { 
     this.parent = options.parent 
    }, 

    render: function() { 
     this.parent.router.navigate("viewA/viewAA"); 
    } 
}); 

var ViewA = Backbone.View.extend({ 
    initialize: function(options) { 
     this.router = options.router 
    }, 

    render: function() { 
     this.nestedView = new ViewAA({ parent: this }); 
    } 
}); 

var router = new Router(); 

var viewA = new ViewA({ router: router }); 

Второй подход, который я использую в более сложных приложений использует ОДНОГО глобальную переменную ... Это выглядит примерно так:

var ViewAA = Backbone.View.extend({ 
    initialize: function(options) { 

    }, 

    render: function() { 
     app.router.navigate("viewA/viewAA"); 
    } 
}); 

app = { 
    router: new Router(), 
    classes: { 
     ViewA: Backbone.View.extend({ ... }), 
     ViewAA: Backbone.View.extend({ ... }) 
    }, 
} 

app.viewA = new app.classes.ViewA(); 
app.viewAA = new app.classes.ViewAA(); 

Подсказка: использование требований RequireJS и AMD всегда лучше, поэтому вы можете попробовать это тоже.

+0

Я использую requirejs, все еще нужно сделать все справочное руководство – adrian

+0

Почему? просто используйте 'module.exports = new Router()' в вашем файле 'router.js', а затем' this.router = require ('router'); 'в ваших представлениях – drinchev

+0

Итак, вы идете, чтобы один крупный маршрутизатор , это нормально, но вы все еще склоняетесь к тоннам косвенности, чтобы добраться до вложенных представлений, view1.view2nested.view2nestednested .... – adrian

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