Jquery Tab控件 - 重新加载已单击的所有选项卡

时间:2011-03-09 03:49:17

标签: jquery-ui jquery-plugins

民间,

我正在使用Jquery UI - Tab。

我有一个编辑屏幕,主窗体和标签显示在下面。现在,当我从一个记录导航到另一个记录时,Ajax调用将进入服务器以获取新的主记录。

现在我想刷新下面的标签,新记录ID,以及我所做的是以下内容:

var jsonTabMetaData = [{"HtmlName":"Notes","Text":"Notes","Url":"../Notes.rl?moduleName=glbModuleName&moduleRecordID=glbModuleRecordID&sessionID=glbSessionID&company=glbCompanyName","Selected":false,"ModuleName":null,"ModuleRecordID":0},{"HtmlName":"AddressTel","Text":"Address & Telephone","Url":"../PhysicalAddress.rl/QuickAddress?moduleName=glbModuleName&moduleRecordID=glbModuleRecordID&sessionID=glbSessionID&company=glbCompanyName","Selected":false,"ModuleName":null,"ModuleRecordID":0},{"HtmlName":"Sendout","Text":"Send outs","Url":"../Sendouts.rl/List?moduleName=glbModuleName&moduleRecordID=glbModuleRecordID","Selected":false,"ModuleName":null,"ModuleRecordID":0},



function fnReboundTabs() {
    $('#tabs a').each(function (index) {
        var newUrl = jsonTabMetaData[$(this).attr("data-index")].Url;
        newUrl = newUrl.replace("glbModuleRecordID", glbModuleRecordID);
        newUrl = newUrl.replace("glbModuleName", glbModuleName);
        newUrl = newUrl.replace("glbSessionID", glbSessionID);
        newUrl = newUrl.replace("glbCompanyName", glbCompanyName);
        this.href = newUrl;
    });

`

    if (firstTimeReboundTabs) {
        firstTimeReboundTabs = false;
        $("#tabs").tabs({
            select: function (event, ui) {
            },
            cache: true,
            event: '<%= (UI.Web.Helper.SessionMaster.OpenTabOnMouseOver) ? "mouseover": "click" %>',
            async: false,
            ajaxOptions: {
                cache: false,
                success: function () { },
                error: function (xhr, status, index, anchor) {
                    $(anchor.hash).html(
                    "Couldn't load this tab. Should you see this error again, please notify admin.");
                }
            }
        });
    }

`

现在的问题是:

当我导航时,URL中的值会发生变化,但是标签点击请求会在新屏幕中显示。

即。它不像Ajax调用那样工作。

主屏幕开始,URL在浏览器地址栏中作为新URL打开。

2 个答案:

答案 0 :(得分:2)

如果我正确地遵循此规则,您需要在更改recordId时更改选项卡内容的URL,并重新加载该选项卡而不重新加载整个页面。

使用标签对象的两种方法可以实现这一点:

要更改网址,请使用.tabs(“url”,index,url),其中:

  • index =您要更新的标签的索引
  • url =新网址的字符串

要随时重新加载标签的内容,请使用.tabs(“加载”,索引)

  • index =您要更新的标签的索引。

一起使用这些应该做你想要的。即当你有一个新的记录时,我会这样做:

mytabs.tabs("url", i, 'mypage?recordId' + newRecordId)
mytabs.tabs("load", i)

文档位于“方法”标签下:jqueryui docs

答案 1 :(得分:0)

这就是我现在所做的:

 function fnReboundTabs() {
    for (var idx = 0; idx < jsonTabMetaData.length; idx++) {

        var newUrl = jsonTabMetaData[idx].Url;
        newUrl = newUrl.replace("glbModuleRecordID", glbModuleRecordID);
        newUrl = newUrl.replace("glbModuleName", glbModuleName);
        newUrl = newUrl.replace("glbSessionID", glbSessionID);
        newUrl = newUrl.replace("glbCompanyName", glbCompanyName);
        $("#tabs").tabs("url", idx, newUrl)
    }

    if (isNaN($('#tabs').tabs().tabs('option', 'selected')))
    { }
    else {
        $("#tabs").tabs("load", $('#tabs').tabs().tabs('option', 'selected'))
    }
}

当在客户端下载主记录时,将调用此函数 - 基于JSON / AJAX。