0

Web ページ内に複数回配置される ASP.Net ユーザー コントロールを作成しました。このコントロールでは、次のような JavaScript オブジェクトを定義しました。

function MyObject( options )
{
  this.x = options.x;
}

MyObject.prototype.someFunction=function someFunctionF()
{
  return this.x + 1;
}

コード ビハインドでは、スタートアップ スクリプトで MyObject を作成しました -

var opts = { x: 99 };

var myObject = new MyObject( opts );

コントロール内の特定のボタンが押されると、myObject.someFunction() が呼び出されます。ここで、x の値が 1 つのコントロールでは 99 であるが、別のコントロールでは 98 であるとしましょう。ここでの問題は、var myObject が繰り返され、最後のインスタンスだけが重要になることです。確かに、まだ出くわしていない概念を使用して var myObject を一意にする方法があります。アイデア?

ありがとう、

クレイグ

4

5 に答える 5

1

このようなあなたのJavascript: -

function MyObject(options) { this.x = options.x; }
MyObject.prototype.someFunction = function() { return this.x + 1; }
MyObject.create(id, options) {
    if (!this._instances) this._instances = {};
    return this._instances[id] = new MyObject(options);
}
MyObject.getInstance(id) { return this._instances[id]; }

次のような起動JavaScript:-

MyObject.create(ClientID, {x: 99});

インスタンスを使用する必要があるその他のコード (クライアント側の onclick イベントなど)

String.Format("onclick=\"MyObject.getInstance('{0}').someFunction()\", ClientID);

クライアントのグローバル名前空間への影響は少ないことに注意してください。ページに追加されたコントロールのインスタンスの数に関係なく、MyObject 識別子のみがグローバル名前空間に追加されます。

于 2009-01-02T11:50:04.940 に答える
0

優れたソリューション アンソニー。提供された他のソリューションも同様に優れており、検討しましたが、このソリューションのようなもう少しエレガントなものを探していました. ありがとう!

于 2009-01-02T14:54:47.280 に答える
0

次のように、「x」の値を静的にして、コード内の任意の場所にアクセスできます。

function MyObject( options ) { MyObject.x = options.x; }
MyObject.x = 99; // static
MyObject.prototype.someFunction = function () { return MyObject.x + 1; }

このようにして、MyObject を再インスタンス化しなくても、コード内のどこからでも MyObject.x にアクセスできます。

于 2009-01-02T04:22:09.957 に答える
0

値が 1 つだけの場合は、関数にそれをパラメーターとして取り、onclick ハンドラーを作成して、各コントロールに正しい値を配置するようにしてください。それよりも複雑な場合は、オプションを配列にすることを検討し、各コントロールについて、特定の各コントロールに対応する配列内のスポットに正しいオプションを挿入します。次に、配列の適切なインデックスを関数に渡します。

于 2009-01-02T02:40:37.743 に答える
0

これを行うには、ScriptManager.RegisterClientScriptBlock を使用して文字列をクライアント側の JavaScript ブロックとして登録します。次に、{0}、{1}..、{n} プレースホルダーを使用してスクリプト文字列を変更し、必要な ID を挿入します。これが最もエレガントな方法であるかどうかは、コードの構造によって異なりますが、ピンチで機能します。次に、Me.ClientID への参照を使用して変数名を挿入できます。

于 2009-01-02T03:53:33.897 に答える