gpt4 book ai didi

backbone.js - Backbone、Marionette、RequireJS 应用启动

转载 作者:行者123 更新时间:2023-12-04 03:02:31 25 4
gpt4 key购买 nike

我正在使用 Backbone、Marionette 和 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模块:

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 中的 Router 模块:

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形成的循环依赖问题。

还有什么建议吗?

最佳答案

我最近想到了这个解决方案,在 main.js 文件中加入了 App 和 Router:

App.js

define(['marionette'], function(Marionette) {
var App;
App = new Backbone.Marionette.Application();
App.vars = {};
App.addRegions({
headerRegion: "#header-region",
mainRegion: "#main-region",
footerRegion: "#footer-region",
dialogsRegion: "#dialogs"
});
App.vent.on("routing:started", function() {
Backbone.history.start();
});
return App;
});

路由器.js

    define(['marionette', 'app'], function(Marionette, App) {
var appRouter, routerController;
routerController = {
showViaggi: function() {
return require(['modules/viaggi/viaggi'], function(Viaggi) {
App.Modules.viaggi = new Viaggi();
return App.Modules.viaggi.start();
});
}
};
return appRouter = Backbone.Marionette.AppRouter.extend({
appRoutes: {
'viaggi': 'showViaggi'
},
controller: routerController
});
});

还有 Main.js,我用 Require.js 加载的初始脚本

define(['app', 'routers/appRouter'], function(App,appRouter) {
App.addInitializer(function() {
App.Router = new appRouter;
return App.vent.trigger("routing:started");
});
return App.start();
});

关于backbone.js - Backbone、Marionette、RequireJS 应用启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15620129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com