我编写了一个 GUI 扩展,它为 SDL Tridion CME 中的许多项目视图(例如组件、页面和模式等)添加了一个附加选项卡。我还编写了一些 JavaScript,如果在加载视图时在 URL 中指定了选项卡名称,它们会直接加载该选项卡。
结果是,如果页面加载时添加了选项卡名称,如下所示:
http://localhost/WebUI/item.aspx?tcm=64#id=tcm:1-48-64&tab=InfoTab
而不是默认的
http://localhost/WebUI/item.aspx?tcm=64#id=tcm:1-48-64
信息选项卡将加载在顶部,而不是常规选项卡。这是使用以下代码片段执行的,效果很好:
$evt.addEventHandler($display, "start", onDisplayStarted);
// This callback is called when any view has finished loading
function onDisplayStarted() {
$evt.removeEventHandler($display, "start", onDisplayStarted);
var tabname = $url.getHashParam("tab");
if (tabname != '') {
var tabControl = $controls.getControl($("#MasterTabControl"), "Tridion.Controls.TabControl");
tabControl.selectItem(tabname);
}
}
现在我想创建一个上下文菜单项来打开项目并使用我的新功能链接到选项卡。我的第一个想法是自己构建项目 URL,然后在我的执行方法中打开一个新窗口。因此,我查看Open.prototype_execute()
了 GUI 标准功能中的默认功能。这存储在navigation.js
CME 的文件中,并由该Tridion.Cme.Commands.Open.prototype._execute
方法执行。代码比我预期的要复杂得多,因为它处理共享项目和权限等。
我不只是将所有这些代码复制到我自己的函数中,而是想知道是否有一种方法可以优雅地扩展现有Open.prototype_execute()
函数并将我的“&tab=MyTab”附加到$cme.Popups.OPEN_ITEM_OPTIONS.URL
我自己函数的常量中。
任何建议将不胜感激。