【问题标题】:How to handle loading of a view in Tridion's CME如何处理 Tridion 的 CME 中的视图加载
【发布时间】:2012-10-05 18:05:29
【问题描述】:

我有一个 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 控制台中收到以下错误消息:

Uncaught TypeError: Object # has no method 'getId'

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

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

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

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

有没有人知道更好的处理方法?

【问题讨论】:

    标签: tridion


    【解决方案1】:

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

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

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

    我的 js 文件如下所示:

    $evt.addEventHandler($display, "start", onDisplayStarted);
    
    function onDisplayStarted() {
    
            $log.message("stuff here");
    }
    

    【讨论】:

    • 嗨,约翰,感谢您的回答。您的方法确实正是我通常会这样做的方式。但在这种情况下,我有一个 JavaScript 文件,其中只有一些部分需要定位到 PublishPopup。我可以将 JavaScript 拆分为两个文件并使用配置来定位每个文件,但我希望也有一种方法可以在代码中完成。 $display "start" 事件效果很好,我只是不明白为什么 getId 方法还不可用(以及是否保证只会在 DashboardView 上发生)。
    【解决方案2】:

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

    尽管如此,configuraton 文件中文件组背后的整个想法是尽量减少为每个视图加载的 javascript 数量,并尽量减少不需要的 javascript 处理。因此,我建议将您的 javascript 文件拆分为多个部分,并仅在必要时加载它们。

    【讨论】:

    • 感谢鲍里斯的回答。两种观点的存在确实完全解释了我所看到的行为。这也意味着我可以放心地忽略 Tridion Dashboard View。但是你(和约翰)是对的,将脚本分成两个文件会更好。
    猜你喜欢
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多