【问题标题】:Marionette Application with Multiple Entry Points具有多个入口点的木偶应用程序
【发布时间】:2013-12-12 15:28:50
【问题描述】:

目前我正在构建的应用程序是具有单个入口点的单页木偶应用程序。当用户在“/”时,我传递了一个非常简单的jade文档:

 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() 对象?

【问题讨论】:

    标签: javascript node.js backbone.js marionette


    【解决方案1】:

    你不必这样做,否则太麻烦了:) 那是 Route 的工作。

    首先,不要在应用定义中立即启动应用。删除此行

    MyApp.start();
    

    然后,将这样的命令放在你的 html 页面的页脚,最好在 dom 准备好之后

    $(function(){
      MyApp.start();
    });
    

    第三个是最重要的。您需要在应用程序或子应用程序中定义您的路线(更好)。这是从 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

    【讨论】:

    • 这仅适用于“#”网址还是也适用于普通网址?
    • 这取决于你的历史设置,默认是哈希。但如果你用 pushState true 定义它,它也适用于普通 url:Backbone.history.start(pushState: true);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多