如何使用require.js在我的打字稿项目中使用Marionette

时间:2013-05-24 04:02:22

标签: backbone.js requirejs typescript marionette amd

我有一些错误如下;

Uncaught ReferenceError: Marionette is not defined 

我正在使用以下files(main.ts->config, app.ts-> first class of the app)使用grunt watch (typescript compile with --module amd)。我的问题是参考我的错误问题,如何导入木偶(modules/marionette.d.ts)以便我可以使用Marionette.Application();并配置我的应用程序?

main.ts;

// Require JS all the things
/// <reference path="modules/require.d.ts" />
/// <reference path="modules/marionette.d.ts" />

require.config({
    basePath: 'assets/js',
    paths : {
        backbone : 'vendor/backbone',
        underscore : 'vendor/underscore',
        jquery : 'vendor/jquery',
        marionette : 'vendor/backbone.marionette',
        debug : 'vendor/ba-debug',
        handlebars: 'vendor/handlebars'
    },
    shim : {
        jquery : {
          exports : 'jQuery'
        },
        underscore : {
          exports : '_'
        },
        backbone : {
          deps : ['jquery', 'underscore'],
          exports : 'Backbone'
        },
        marionette : {
          deps : ['jquery', 'underscore', 'backbone'],
          exports : 'Marionette'
        },
        handlebars: {
            exports:'Handlebars'
        },
        debug: {
          exports: 'debug'
        }
    }
});

// initalise the app
// load AMD module app.ts (compiled to app.js) , tsc --module AMD main.ts
// and include shims $, _, Backbone

require(['backbone', 'app','routers/router','routers/controller', 'debug', 'jquery','underscore'], (Backbone, App, CustomRouter, AppController, debug, $, _ ) => {

  debug.log('starting app');


  App.on('initialize:after', function(options) {
        if (Backbone.history) {
            Backbone.history.start();
        }

  });

  var router = new CustomRouter({
      controller : new AppController()
  });


  App.start();
});

app.ts;

/// <reference path="modules/marionette.d.ts" />
var app:any = new Marionette.Application();

app.addRegions({
   header : '#Header',
   // main   : CustomRegion.extend({el: '#main'})
   main  : '#Main'
});

app.addInitializer(function() {


});

由于

2 个答案:

答案 0 :(得分:1)

你需要告诉requireJS在开始运行app.js之前加载marionette

这是使用amd-dependency完成的:

/// <amd-dependency path="marionette"/>

您可以在此处查看示例:https://github.com/basarat/typescript-amd/blob/master/app/scripts/app.ts 以及视频教程:http://www.youtube.com/watch?v=4AGQpv0MKsA

答案 1 :(得分:-1)

我使用它作为参考,它完美地运作Structuring Backbone with RequireJS and Marionette。希望这有助于您解决问题! :)