6

これは私の最初の投稿なので、幸運を祈ります:)

私はホットタオル(デュランダル) + typescript を使いたいです、私はこれらのスレッドに従いまし: in-combination-with-durandal-en-typescript -不正確な this-in-select

また、 DurandalTypescriptExampleサンプルも試しました

このサンプルは、次のエラーで実行されません:

「「/」アプリケーションでサーバー エラーが発生しました。

リソースが見つかりません。"

最初は、ビューモデルをタイプスクリプトで変更するだけで、その後シェルを変更することにしましたが、両方の状況で次のエラーが発生しました:

これは私のshell.tsコードです(このサンプルから使用しました):

/// <reference path="../durandal/durandal.d.ts" />

import _router = module('durandal/plugins/router');
import app = module('durandal/app');

export var router = _router;

export function search() {
    app.showMessage('Search not yet implemented...');
}
export function activate() {
    return router.activate('welcome');
}

そして、私はこのエラーを受け取りました:

- JavaScript runtime error: 'exports' is undefined

何か案が?

可能であれば、実行可能なソリューションが高く評価されます。

どうなるか見てみましょう。

4

4 に答える 4

5

DurandalTypescriptExample でも同じ問題がありました。ただし、このプロジェクトのコードは、デュランダルに必要な変数のみを公開することを確認した場合に、viewmodel ファイルに typescript コードを実装する方法を示しました。少なくともactivate関数とtitle変数。

以下のコード例を参照してください。

/// <reference path="../../dts/knockout/knockout.d.ts" //>
export class ViewModel {
    title: string =  'Home View';
    MyTitle: KnockoutObservableString; //MyTitle can be referenced in home.html as vm.MyTitle
    public activate() {
         this.MyTitle = ko.observable(this.title + " with my ko title");
         return true;
    }
}

export var vm = new ViewModel();
//The Durandal plugin-interface variables
export var title = vm.title;
export var activate = function () { return vm.activate(); };

これを実証するための既製のプロジェクトが見つからなかったので、自分で作成する必要がありました。github で私のバージョンのホット タオル プロジェクトを参照してください。

https://github.com/Svakinn/TypeTowel

于 2013-06-10T11:05:47.563 に答える
3

グローバルスコープで何かをエクスポートする場合、外部モジュールランドにいるため、モジュールを管理するにはサードパーティのライブラリが必要です.

RequireJS を使用することをお勧めします。基本的に次のタイプスクリプト:

export function f(){
}

次の js を生成します。

function f() {
}
exports.f = f;

exportsサード パーティのモジュール ローダーによって定義された変数です。そのようなモジュールローダーがない場合、エクスポートは未定義です。私のチュートリアルでは、さらに説明しています。

于 2013-05-19T10:59:35.930 に答える
2

クラスを requirejs/durandal モジュールとしてエクスポートする方が簡単だと思います。次の export ステートメントを使用します。

    export = ClassName;

これにより、インターフェイスを実装したり、ビュー モデルの基本クラスを拡張したりすることもできます (拡張部分についてはわかりません)。モジュールに含めたいすべての関数に対してエクスポート xxx... コードを繰り返す必要はありません。

試してみる。

実際の例:

    // Durandal "test" view model definition using typescript
    import dialog = require("plugins/dialog")

    class Test {
        title: string = 'test';

        public activate() {
            dialog.showMessage("the test is working!");
            return true;
        }
    }

    // Instead of using code like:
    // export var instance = new Test();
    // export var activate = function() { return instance.activate(); }
    // .. more Durandal specific overrides...

    // Simply use...
    export = Test;
于 2013-11-27T23:42:31.063 に答える
1

慣例によりビューの読み込みをサポートする Durandal v2 用のプラグインを作成しました (ModuleId または ModuleId+"View")。ここで要旨として入手できます:https://gist.github.com/Jaben/6180861

于 2013-08-11T14:24:19.387 に答える