使用RequireJS将Mustache加载为AMD模块 - 未定义Mustache

时间:2013-01-09 19:53:37

标签: backbone.js requirejs typescript mustache

我无法将mustache.js作为带有RequireJS的AMD模块加载(在Backbone模型中使用)。我也开始使用TypeScript,因此我并没有完全遵循依赖和声明的流程!

从app.ts开始:

require.config({
    paths: {'jquery': 'lib/jquery-1.8.3.min', 'underscore': 'lib/underscore.min', 'backbone': 'lib/backbone.min', 'mustache': 'lib/mustache', 'appmain': 'AppMain'}, 
    shim: {mustache: { deps: ["jquery"] }, backbone: { deps: ["underscore", "jquery"] }, appmain: {deps: ["backbone", "mustache"] } } });

require(['appmain'], (main) => {
    var appMain = new main.AppMain();
    appMain.run();
});

appmain.ts:

import tm = module("models/TestModel");

export class AppMain {
    public run() {
        var testModel = new tm.TestModel()
    }
}

TestModel.ts:

/// <reference path="../modules/backbone.d.ts"/>
export class TestModel extends Backbone.Model {
    constructor(options?) {
        super(options);
    };
    initialize() {
        var stringTemplate = "{{something}}";
        Mustache.compile(stringTemplate);
    };
}

我收到一个javascript错误,说“Mustache未定义”,尽管在TestModel.js之前会加载mustache.js。我只是从这里使用mustache.js:https://github.com/janl/mustache.js所以我想我可能不明白AMD模块是如何正确声明的。

我看到有一些“AMD包装”作为这个项目的一部分,但我似乎无法弄清楚它们是如何被使用的。

2 个答案:

答案 0 :(得分:2)

Mustache define itself as an AMD module,所以不需要填充。我不知道TypeScript以及它如何与RequireJS集成,但尝试从配置的shim数组中删除Mustache。

答案 1 :(得分:1)

我不太了解TypeScript,但是文档提到编译器选项会将生成的javascript从CommonJS更改为AMD。 (--module amd

Visual Studio TypeScript Options

希望这有帮助