3


我在我的应用程序中使用 jQuery 模态对话框来处理正常的 CRUD 操作。在某些情况下,我什至打开了两个堆叠的模式对话框。

然后,我在外部 javascript 文件中创建了两个通用函数,分别处理 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 调用返回的渲染的 Partial 标记的位置。此功能工作正常。

在 ajax 调用返回的 Partial View 内部有输入,最后是以下代码

<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) {
}

它处理

  • 表单提交到正确的控制器动作
  • 用户反馈(例如“动作执行成功”)
  • 对话框关闭操作

需要 level 参数来处理所使用的正确 DIV 面板的所有功能,包括关闭对话框。

我希望能够有时将相同的对话框显示为对话框,有时显示为子对话框。
为了能够做到这一点,我的意思是“从逻辑上讲”,因为我对 javascript 和 jQuery 不那么强大,我需要进行以下更改:

  • 修改_loadDialog函数以将level参数保存在对话框标记本身内
  • 修改_submitForm函数并使用之前从函数中level保存的正确参数进行设置。_loadDialog

我怎样才能做到这一点?

4

2 回答 2

1

我对什么是何时何地有点困惑,但似乎您想将一些信息与特定元素相关联。

为此,您可以使用 jQuery 的.data()方法。它将您想要的任何数据与特定元素相关联。

不确定在您的情况下应该如何使用它,但这是一个通用示例:

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

现在,具有 ID 的元素将在其关联数据someSelector中将数字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 回答