0

スクリプトシャープで次の行を書きたいと思います。

App.SP = SP = Ember.Object.extend({
init: function (lineV, lineH, resourceMethod){...

これは可能ですか?どうすればいいですか?

4

2 に答える 2

2

一般に、すべてのスクリプトフレームワークには、クラスを定義する独自のバリアントパターンがあり、script#はすべての可能なバリアントをサポートしているわけではありません...したがって、Initメソッドを使用してSPと呼ばれるac#クラスを記述し、EmberJSの方法を期待できます。クラスを定義することが結果です。

できることは、ディクショナリを受け取るextendメソッドを使用してEmber.Objectのクラスを定義し、ディクショナリに名前と値のペアの束を入力することです。たとえば、静的メソッドへのデリゲートに値を設定した「init」などです。

例(これはほんの始まりに過ぎません。このパスを続行する場合は、微調整と再作業が必要になると確信しています):

インポートライブラリの場合:

namespace EmberApi {

    [Imported, ScriptNamespace("Ember"), ScriptName("Object")]
    public static class EmberObject {

        public static object Extend(Dictionary<string, object> nameValuePairs) {
            return null;
        }
    }
}

そしてあなたのコードでは:

public static void App {

    static App() {
        Dictionary<string, object> members = new Dictionary<string, object>();
        members["init"] = Init;

        object sp = EmberObject.Extend(members);
    }

    public static void Init(int lineV, int lineH, string resourceMethod) { ... }
}

ですから、それは可能だと思いますが、c#のようにコードを書くという価値のある小道具をたくさん失っています。

より適切なのは、既存のAPI /フレームワークを使用できるようにすることですが、独自のコードを通常のc#クラスとして記述し、これらの型構造をスクリプトに変換するscript#パターンを活用します。

パターン自体に関する提案がある場合は、歓迎以上に、特に。将来的にはscript#パターンをかなり軽量化することが考えられているからです。

于 2012-07-16T17:14:56.563 に答える
1

別の質問に答える際に、新しいアプローチが思い浮かびました。それは、あなたがまだ興味を持っている場合や、将来的に他の人のために、いくつかの可能性を秘めたアイデアとして共有することです。

コンパイラーは、Type.registerClassやその他の関連メソッドなどのAPIを含む特定のランタイムコントラクト(mscorlib.jsによって実行されるコントラクト)を想定しています。型を定義するための独自のパターンを備えた他のフレームワークを操作するための1つのアプローチは、registerClassなどのメソッドが他のライブラリへのブリッジとして機能するようにmscorlib.jsを単純に再実装することです。

于 2012-08-19T18:06:37.650 に答える