1

cshtml ファイルに 2 回ロードしようとしている部分ビューがあります。

部分ビュー内には、javascript 関数もあります。この時点で、cshtml をページにロードすると、同じ名前の 2 つの Javascript 関数が作成されます。

この種のシナリオを回避し、部分ビューをバインドしているモデルに応じて、Javascript 関数に一意の名前を付けたいと考えています。

「@Model.Id」のようなパラメーターに関連付けることで、パーシャル内の各コントロールの一意性を実現できませんでした。しかし、Javascript 関数の独自性については、同じようなことを適用することはできません。

私の悪い英語で申し訳ありません。追加の詳細が必要な場合はお知らせください。

4

2 に答える 2

1

パーシャルごとに異なる名前の関数を多数用意する代わりに、各コントロールで動作する単一の JavaScript 関数を用意することができます。したがって、たとえば、これらのコントロールにクラスを割り当ててから、jQuery pluginこのクラス名を持つすべてのコントロールにアタッチされた の形式で関数を記述することができます。

これで、部分的にマークアップと JavaScript を混在させることなく、別の JavaScript ファイル内で関数を宣言できるようになりましたが、これは悪い設計です。プラグインは、標準の jQuery 構文を使用して、このクラスを使用してすべてのコントロールに簡単にアタッチできます。

$(function() {
    $('.someClass').myFunction();
});

また、DOM 要素で HTML5 の data-* 属性を使用して、モデルから取得した一意の識別子などのメタデータを関連付けることもできます。このメタデータは、jQuery プラグインでアクセスできるようになります。

例えば:

<div class="someClass" data-id="@Model.Id">
    This is some div with associated metadata
</div>
于 2013-02-03T09:48:20.373 に答える
0

そのようなシナリオを実現するために、を使用できますdata-attribute

たとえば、divで囲まれた同一のhtmlコードがあり、それらのdivのIDは異なります。

各divにはがdata-attributeあり、jqueryを使用するとイベントをキャッチできます(クリックのように)

今コード例

HTML

<div id="id1" data-attribute="doSomething">Element</div>
<div id="id2" data-attribute="doSomething">Element</div>

あなたの場合、それらのdivは部分ビューからの結果を表します。また、id属性の値ストアを変更して、次のようなモデルから取得することもできます。id="id@{Model.Id}"

JQuery

$("div[data-attribute=doSomething]").click(function() {
    alert("Clicked element: " + $(this).prop("id")); 
});

フィドルの例

私はそれを達成するためにJqueryの属性セレクターを使用しています

クラス属性を定義することによってもそれを達成できることに注意してください。しかし、実際にクラスが必要な場合はこれを使用する必要があると思います。それ以外の場合は、次のようなカスタム属性を使用します。data-value="something"

于 2013-02-03T09:56:12.357 に答える