4

backbone.d.ts 定義を指す次のものがあります。

import Backbone = module("../../../dep/backbone/backbone");

export class Codebook extends Backbone.Model {

    defaults() {
        return {
            id: -1,
            title: -1
        }
    }

    initialize() {
        // do nothing
    }

}

これにより--module amd、以下が生成されます。

define(["require", "exports", "../../../dep/backbone/backbone"], function(require, exports, __Backbone__) {

グローバルのため、RequireJS 構成ファイルでバックボーンをシムしました。私の定義がbackbone相対パスの代わりに言うようにしたいと思います。定義を操作するビルド後のプロセス以外に回避策はありますか?

4

3 に答える 3

3

この問題の解決策は、Ambient Declaration を最終的な実際のモジュールと同じ場所に配置して、同じパスで参照できるようにすることだと思います。

と同じbackbone.d.ts場所にある必要がありますbackbone.js

于 2012-10-22T15:46:38.707 に答える
1

相対パスを使用する代わりに、常にルートからのパスを使用します。何かのようなもの:

import underscore = module('libs/underscore/underscore');

ハックは、シムで同じ名前を定義できることです。このようなもの:

require.config({
    paths: {
        'libs/underscore/underscore': 'libs/underscore/underscore'
    },
    shim: {
        'libs/underscore/underscore': {
            exports: '_'
        }
    }
});

常にルートからのパスを使用することで、相対パスを使用した場合とは対照的に、パスは同じままになります。これはハックですが、私にとってはうまくいきます ( GitHub )。

于 2012-10-23T00:52:23.973 に答える
0

TypeScriptでAMDモジュールを使用する方法についてのブログをまとめました。

まず、次のようにバックボーンへの参照パスを使用します。

/// <reference path="../../modules/Backbone.d.ts" />

次に、インポートせずにクラスを定義します。

export class MTodoCollectionView extends Backbone.View {
...
}

次に、require.configとapploaderを使用します。

require.config({
    baseUrl: '../',
    paths: {
        'underscore': 'lib/underscore',
        'backbone': 'lib/backbone'
    }, 
    shim: {
        underscore: {
            exports: '_'
        },
        backbone: {
            deps: ["underscore", "jquery"],
            exports: "Backbone"
        }
    }
});

require(['jquery','underscore','backbone','console','app/AppMain', 
     ], 
    ($, _, Backbone, console, main) => {
    // code from window.onload
    var appMain = new main.AppMain();
    appMain.run();
});

アプリがコードのrequireブロックに到達すると、バックボーンがグローバルに定義されます。
楽しむ、

于 2012-10-23T14:55:39.283 に答える