【问题标题】:jQuery UI tabs panelTemplate option deprecatedjQuery UI 选项卡 panelTemplate 选项已弃用
【发布时间】:2013-08-18 00:19:05
【问题描述】:

所以我将 jquery ui 从 1.8 升级到 1.10。 选项卡似乎已根据以下内容在 1.9 中进行了重构:http://jqueryui.com/upgrade-guide/1.9

在阅读时 - 出现了:

不推荐使用的 idPrefix、tabTemplate 和 panelTemplate 选项;采用 刷新方法

如上所述,添加和删除方法已被弃用。 因此,idPrefix、tabTemplate 和 panelTemplate 选项具有 也被弃用了。您应该替换 idPrefix 的所有用途, 带有您想要的标记的 tabTemplate 和 panelTemplate 选项 使用。

不太清楚You should replace all uses... with the markup you would like to use 是什么意思。

HTML

<div id="main-xxx-tabs">
<ul>
<li><a href="link1.php">link1</a></li>
<li><a href="link2.php">link2</a></li>
</ul>
</div>

JS

jQuery("#main-xxx-tabs").tabs({
  panelTemplate: "<div class='main-xxx-tabs-content'></div>"
})

如果有人可以提供如何正确升级的示例 - 将不胜感激。

【问题讨论】:

    标签: jquery jquery-ui jquery-ui-tabs jquery-1.9 jquery-1.10


    【解决方案1】:

    jQuery UI 1.8 具有addremove 方法(和相关事件),用于动态删除或添加标签到您的小部件。

    legacy 1.8 documentationtabs

    • 添加(网址,标签[,索引])
      添加标签。


    • 删除(索引)
      删除标签。


    这两种方法使用了以下选项:

    panelTemplate 类型:字符串


    默认值:“”
    在使用 add() 方法添加选项卡或即时为远程选项卡创建面板时,从中创建新选项卡面板的 HTML 模板。

    tabTemplate 类型:字符串


    [see doc]

    idPrefix 类型:字符串


    [see doc]

    如您所见,panelTemplate 是使用 add 方法创建面板的 HTML 模板。

    所有这些现在都已弃用 - 当前动态添加或删除选项卡的方法是借助新的 refresh 方法:

    刷新()


    处理直接在 DOM 中添加或删除的任何选项卡并重新计算选项卡面板的高度。结果取决于内容和 heightStyle 选项。
    此方法不接受任何参数。


    正如升级指南所述,您需要删除脚本中的所有 addremove 方法调用,将它们替换为直接操作 DOM 的代码,然后调用 refresh()
    此外,您需要丢弃idPrefixtabTemplatepanelTemplate 的任何设置选项。

    正如您的代码所暗示的,您正在使用add 方法,例如:

    $("#main-xxx-tabs").tabs("add", "/remote/tab.html", "New Tab");
    

    使用新的tabs API,您应该执行类似的操作(考虑到您当前的panelTemplate 值):

    /* Add tab */
    $("#main-xxx-tabs .ui-tabs-nav")
       .append("<li aria-controls='newTabID1'><a href='/remote/tab.html'>New Tab</a></li>")
    
    /* Add respective tab panel (content) and refresh widget */
    $("#main-xxx-tabs")
       .append("<div id="newTabID1" class='main-xxx-tabs-content'>New Tab Content</div>");
       .tabs("refresh");
    

    这将创建一个新标签。如果您不需要远程加载(ajax)选项卡,您可以将href 的值替换为与aria-controls \ id 相同。

    最后,升级指南还给你一个how to remove a tab with the new API的例子。

    编辑:


    如果您只是使用panelTemplate 作为主要(第一个)选项卡的模板,而不是动态创建它们,则适用相同的规则;您将不得不直接添加适当的 html。如果你升级前的html是:

    <div id="main-xxx-tabs">
    <ul>
    <li><a href="link1.php">link1</a></li>
    <li><a href="link2.php">link2</a></li>
    </ul>
    </div>
    

    那么你应该按照以下方式做一些事情:

    <div id="main-xxx-tabs">
       <ul>
          <li><a href="#tabs-1">Preloaded</a></li>
          <li><a href="link1.php">link1</a></li>
          <li><a href="link2.php">link2</a></li>
       </ul>
       <!-- vv Constructed from your original panelTemplate vv -->
       <div id="tabs-1" class="main-xxx-tabs-content">
          <p>Your preloaded content here.</p>
       </div>
    </div>
    

    为了进一步澄清,panel 是标签的内容 div。
    对于加载 ajax 的选项卡,您无需创建面板 - 它将自动为您创建。

    如此有效,要让事情重新开始,您只需删除panelTemplate 选项即可。
    这是一个展示 ajax 加载以及预加载选项卡的 JSFiddle: http://jsfiddle.net/losnir/LWmVv/
    另请参阅jQuery UI Tabs Documentation

    【讨论】:

    • 不确定我是否遵循 - 我不想添加更多选项卡,只是以某种方式为所有选项卡设置模板。这些选项卡的内容是通过 ajax 加载的。
    • 你应该阅读 jQuery UI Tabs 文档,它已经为你准备好了。但是,我扩展了我的答案以包含更多示例并进一步解释差异。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    相关资源
    最近更新 更多