2015-08-30 1 views
2

Я пытаюсь обновить приложение от Marionette 1. *> 2.4.2. Большая часть этого изменения переходит от модулей Marionette к использованию Browserify/Watchify с модулями стиля CommonJS.Маршрутизатор Marionette не запускает метод контроллера по маршруту

Я ударил блокпост, пытаясь запустить маршрутизатор/контроллер. Ошибка не возникает, но по какой-то причине мои маршруты не запускают мои методы контроллера.

doc_router.js:

var $ = require('jquery') 
    , _ = require("underscore") 
    , Backbone = require("backbone") 
    , Marionette = require("backbone.marionette") 
    , App = require("../../app.js") 

var Router = Marionette.AppRouter.extend({ 

    appRoutes: { 
     "docs": "listDocs" 
    } 
}); 

// Map to controllers 

var API = { 

    listDocs: function() { 
     console.log("listDocs") // Doesnt log to console 
     App.DocApp.List.Controller.listDocs(); 
    } 
}; 

// Update the URL when a controller event 
// that requires it is triggered, then call 
// appropriate controller via API. 

App.on("docs:list", function() { 
    App.navigate("docs"); 
    API.listDocs(); 
}); 


// Initialize router when app starts 

App.on("before:start", function() { 
    console.log("History started? ", Backbone.History.started); 
    console.log("Initializing router...") 
    new Router({ 
     controller: API 
    }); 
}); 

module.exports = Router; 

app.js:

var $ = require('jquery') 
    , _ = require("underscore") 
    , Backbone = require("backbone") 
    , Marionette = require("backbone.marionette") 


var App = new Marionette.Application(); 

App.addRegions({ 
    mainRegion : "#main-region", 
    modalRegion : "#modal-region" 
}); 

App.on("start", function() { 
    if (Backbone.history) { 
     console.log("Application starting..."); 
     var fetchingCurrentUser = App.request("entities:current-user"); 

     $.when(fetchingCurrentUser).done(function (current_user) { 
      App.currentUser = current_user; 
      console.log("Starting history..."); 
      Backbone.history.start(); 

      console.log("History started? ", Backbone.History.started); 
     }); 
    } 
}); 

module.exports = App 

main.js:

var _ = require('underscore'); 
var App = require('./app.js'); 

App.Entities = _.extend({}, 
    require("./entities/doc.js"), 
    require("./entities/user.js") 
); 

// DocsApp 
App.DocsApp = { 
    "Router": require("./apps/doc/doc_router.js"), 
    "Reader": { 
     "Controller": require("./apps/doc/reader/doc-reader_controller.js"), 
     "Views": require("./apps/doc/reader/doc-reader_views.js") 
    }, 
    "List": { 
     "Controller": require("./apps/doc/list/doc-list_controller.js"), 
     "Views": require("./apps/doc/list/doc-list_views.js") 
    } 
}; 

App.start(); 

Судя по моим бревнами консоли это не кажется, как я m запускать Backbone.history перед созданием маршрутизатора. На самом деле вытащить мои волосы на этом ... Любая помощь приветствуется.

Редактировать

Использование Backbone.Router появляется на работу (ниже). Почему не работает Marionette.AppRouter?

var Router = Backbone.Router.extend({ 

    routes: { 
     "": "listDocs", 
     "docs": "listDocs", 
     "docs/:doc_id" : "readDoc", 
     "docs/:doc_id/edit" : "editDoc" 
    }, 

    listDocs: function() { 
     console.log("listDocs") // Logs to console 
     // App.DocApp.List.Controller.listDocs(); 
    } 
}); 

ответ

1

Законченное переключение на backbone.base-маршрутизатор, который позволил мне указать контроллер, поскольку у Marionette AppRouter, по-видимому, есть проблемы с Browserify.

+1

«У AppRouter, по-видимому, есть проблемы с Browserify», есть ли у вас информация об этом? – YoannM

+0

У меня такая же проблема, и кажется, что маршруты противоречат маршрутам Express. Мое приложение правильно работало над моим приложением Tomcat. сервер. Но с тех пор, как я переключился на Экспресс, все маршруты перестали выполняться. Также он работал при использовании Backbone router. – Alexus

1

марионеток расширяет Backbone встроенный в маршрутизатор, так что если вы хотите router.navigate, чтобы вызвать функцию маршрута, you'll have to pass the option trigger like this:

router.navigate('docs', {trigger: true}); 
+0

Извините, может быть, я должен быть более ясным в вопросе. Я перехожу к «docs» в адресной строке браузера. Не нужно использовать router.navigate ("docs"). Хотя я пробовал это только для того, чтобы помочь отладить ситуацию, и она по-прежнему не работает. –

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

  • Нет связанных вопросов^_^