Я создаю приложение с базовой сетью, марионеткой и RequireJS, и я бы хотел запустить несколько более опытных людей, если бы запуск приложения мог быть усовершенствован/улучшен каким-либо образом.Магистраль, марионетка, запуск приложения RequireJS
структура папок:
index.html
js/
collections/
libs/
backbone.js
marionette.js
require.js
...
models/
views/
app.js
init.js
router.js
В настоящее время самонастройки для приложения выглядит следующим образом.
index.html
определяет requireJS точку входа, как:
<script data-main="js/init" src="js/libs/require.js"></script>
init.js
делает конфигурацию RequireJS и:
require(['app'], function(App){
App.start();
});
В модуле приложения в app.js
:
App = new Backbone.Marionette.Application();
App.addInitializer(function (options) {
// initialize the Router; will only setup the routes and corresponding callbacks; not history.start()
App.router = new Router();
// initialize Marionette regions
App.addRegions({
'header': '#header',
'main': '#main',
'footer': '#footer'
});
});
App.on('start', function(options) {
Backbone.history && Backbone.history.start() || console.error('No "Backbone.history" to .start()');
});
return App;
Модуль маршрутизатора в router.js
:
return Backbone.Router.extend({
routes: {
'panel/:handle': 'showPanel',
},
showPanel: function (handle) {
require(['app'], function (App) {
App.main.show(new Panel_v({userHandle: handle}));
});
}
});
Есть ли способ сделать модуль Router менее запутанным? Я разработал этот способ для решения проблемы циклической зависимости, созданной App-> Router-> App.
Любые другие предложения?
Ницца! Это немного распутывает спагетти на маршрутизаторе. Одна вещь. Не имеет смысла размещать App.addRegions() внутри App.addInitializer()? –
Я полагаю, это зависит от вашего вкуса, может быть, это более правильно семантически, но в итоге эффект, который вы получаете, тот же. – Ingro