如何在Tridion的CME中处理视图的加载

时间:2012-10-15 17:47:42

标签: tridion

我对Tridion 2011 Content Manager Explorer有一个扩展,我只想为特定视图执行特定的JavaScript。

我使用以下JavaScript片段执行此操作:

 
var onDisplayStarted = function () {
    $evt.removeEventHandler($display, "start", onDisplayStarted);

    if ($display.getView().getId() == "PublishPopup") {
      ...
    }
};
$evt.addEventHandler($display, "start", onDisplayStarted);

此代码在过去运行良好,它肯定会在PublishPopup打开时触发,并确保我的代码仅在该特定视图中执行。

但遗憾的是,在加载DashboardView时,我有时会在JavaScript控制台中收到以下错误消息:

  

未捕获的TypeError:对象#没有方法'getId'

错误不会导致任何问题,很可能是因为Tridion的UI框架正确处理了事件处理程序中的错误。但我仍然希望不要在JavaScript控制台中显示错误。

我了解如何检测getId方法是否存在:

if ($display.getView().getId && $display.getView().getId() == "PublishPopup") {

但这只是意味着代码永远不会执行。虽然它现在似乎在PublishPopup中正常工作,但我宁愿知道处理这种类型的正确方法“我的代码应该在视图初始化后执行”序列。

有谁知道更好的方法来解决这个问题?

2 个答案:

答案 0 :(得分:6)

您的配置中是否包含仅在弹出窗口中包含扩展名的代码?例如:

<cfg:extension target="Tridion.Web.UI.Editors.CME.Views.Popups.Publish">

我通常使用该配置仅在cme中的特定视图上运行脚本。

我的js文件看起来像这样:

$evt.addEventHandler($display, "start", onDisplayStarted);

function onDisplayStarted() {

        $log.message("stuff here");
}

答案 1 :(得分:5)

嗯,有两个不同的视图,它们同时加载 - Dashboard View和Tridion Dashboard View。 Tridion Dashboard View是您在Ribbon工具栏中单击SDL Tridion选项卡时看到的。实际上,这个视图没有getId方法(这很奇怪,顺便说一句)。这就是你遇到这个问题的原因。

然而,configuraton文件中文件组背后的整个想法是最小化为每个视图加载的javascript数量,并最小化不需要的javascript处理。因此,我建议将您的javascript文件拆分成碎片并仅在必要时加载它们。