3


アプリでjQueryモーダルダイアログを使用して、通常のCRUD操作を処理しています。場合によっては、2つのスタックされたモーダルダイアログでさえ開いています。

次に、外部javascriptファイルに2つのジェネリック関数を作成して、CRUDフォームの表示と送信をそれぞれ処理しました。

モーダルダイアログを表示するには、次の関数を呼び出します

function _loadDialog(level, action, id, title, onCloseHandler) {
    var panel = panels[level];
    $(panel).dialog("option", "title", title);
    var url = action;
    if (id != "") url = url + "/" + id;
    $.ajax({
        type: "get",
        dataType: "html",
        url: url,
        data: {},
        success: function(response) {
            $(panel).html('').html(response).dialog('open');
        }
    });
    $(panel).unbind("dialogclose").bind("dialogclose", function(event, ui) {
        if (onCloseHandler != null) {
            onCloseHandler();
        }
    });
}

この関数は、とりわけ、levelダイアログをスタックする方法と、ajax呼び出しから返されるレンダリングされた部分マークアップを配置する場所を関数に指示するパラメーターを受け取ります。この関数は正常に機能します。

ajax呼び出しによって返される部分ビューの内部に入力があり、最後に次のコードがあります

<div style="text-align:right;">
    <input type="submit" id="btnSave" value="Salva" />
</div>

そして、例えば、jQueryの部分については、

$("#contactForm").submit(function(event) {
    _submitForm(1, event, "#contactForm", "post", "html", '<%= Url.Content("~/Contact/Save") %>');
});

ご覧のとおり、送信機能には次の署名があります

function _submitForm(level, event, formName, atype, adataType, aurl) {
}

そしてそれは処理します

  • 正しいコントローラーアクションへのフォーム送信
  • ユーザーフィードバック(例:「アクションが正常に実行されました」)
  • ダイアログを閉じる操作

レベルパラメータは、ダイアログを閉じることを含むすべての機能を、使用される正しいDIVパネルにアドレス指定するために必要です。

同じダイアログをダイアログとして表示したり、サブダイアログとして表示したりしたいと思います。
これを実行できるようにするには、「論理的に言えば」という意味です。私はjavascriptとjQueryにそれほど強くないため、次の変更が必要です。

  • ダイアログマークアップ自体の中にパラメータ_loadDialogを保存するように関数を変更しますlevel
  • 関数を変更し、以前に関数から保存され_submitFormた正しいパラメーターを使用して作成します。level_loadDialog

どうすればこれを達成できますか?

4

2 に答える 2

1

何がいつどこにあるのか少し混乱していますが、特定の要素に少しの情報を関連付けたいようです。

これを行うには、jQueryの.data()メソッドを使用できます。必要なデータを特定の要素に関連付けます。

状況に応じてどの程度正確に使用する必要があるかはわかりませんが、一般的な例を次に示します。

$('#someSelector').data('level', 3);

someSelectorこれで、IDを持つ要素の番号が、関連付けられたデータの属性に3マップされます。'level'

したがって、それを取得するには、次のようにします。

$('#someSelector').data('level'); // returns 3

データが関連付けられている要素を破棄する場合(これはそのようなデータの一例にすぎません)、データを自動的または手動で削除する、または他の方法のいずれか.remove()を使用する必要があります。.empty()

于 2010-11-13T16:59:14.743 に答える
1

必要なのは、関数を呼び出すときlevelに、関数に既に持っているパラメーターを渡すことだけのようです。_submitForm

function _loadDialog(level, action, id, title, onCloseHandler) {
    var form = $('<form ...></form>');
    // ... Generates the form markup

    form.submit(function() {
        _submitForm(level, ...);
    });
}

私は明らかにあなたの実装について知らないすべての詳細をスキップしましたが、重要なのは、level渡されたものはすべて、_loadDialog後で_submitForm呼び出されたときに渡されるということです。

JavaScriptでは、_submitForm呼び出しと同時に呼び出されなくてもかまいません_loadDialog。「クロージャ」(JavaScriptプログラマーが話したいこと)と呼ばれるものを通じて、level変数は匿名のコールバック関数内に安全に保存されform.submit()、その関数が最終的に呼び出されたときに同じ値で引き続き使用できます。

于 2010-11-13T12:48:19.270 に答える