目前我正在构建的应用程序是具有单个入口点的单页木偶应用程序。当用户在“/”时,我传递了一个非常简单的玉文档:
body
header
section
div#main
script(src='/javascripts/lib/require.js', data-main='/javascripts/application.js')
我正在加载的唯一一个javascript是我的require.js页面,一旦加载了我就开始使用Backbone.Marionette.Application()
,这就是我为整个应用程序创建的唯一应用程序对象,它可以处理所有内容。
define([
'zepto', 'marionette', 'router', 'events'],
function ($, Marionette, router, Event) {
// set up the app instance
var MyApp = new Backbone.Marionette.Application();
MyApp.addRegions({
main: "#main"
});
MyApp.addInitializer(function(){
});
MyApp.on("initialize:after", function(){
var newRouter = new router(MyApp);
Backbone.history.start();
});
MyApp.start();
return MyApp;
});
如果我有多个入口点(换句话说,在服务器端创建了多个html页面),例如一个用于“课堂”,一个用于“用户档案”,一个用于“讨论”,这是否意味着我需要单独的要求.js文档加载每个页面和单独的Backbone.Marionette.Application()
对象?
答案 0 :(得分:1)
你没有其他方面它太麻烦:)这是Route的工作。
首先,不要立即在应用定义中启动应用。删除此行
MyApp.start();
然后,将这样的命令放在你的html页面的页脚上,并且在dom ready之后更好
$(function(){
MyApp.start();
});
第三是最重要的。您需要在App或子应用程序中定义您的路线(更好)。这是从BBCloneMail“借来”的代码
BBCloneMail.module("ContactApp", {
startWithParent: false,
define: function (ContactApp, App, Backbone, Marionette, $, _) {
var Router = Marionette.AppRouter.extend({
before: function() {
App.startSubApp("ContactApp", {});
},
appRoutes: {
"contacts": "showContacts"
}
});
在上述情况下,当访问者从example.com/contacts进入您的应用时,方法showContacts
将被触发,这是您安排页面特定逻辑的开始。
有关appRouter的更多信息: https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.approuter.md