9

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開いたときに確実にトリガーされ、コードがその特定のビューでのみ実行されるようにします。

しかし、残念ながら、JavaScriptコンソールでDashboardView:の読み込み中に次のエラーメッセージが表示されることがあります。

Uncaught TypeError:オブジェクト#にはメソッド'getId'がありません

イベントハンドラーのエラーはTridionのUIフレームワークによって正しく処理されるため、エラーによって問題が発生することはほとんどありません。しかし、JavaScriptコンソールにエラーが表示されないようにしたいと思います。

getIdメソッドが存在するかどうかを検出する方法を理解しています。

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

しかし、それはコードが実行されないことを意味します。現在は正常に機能しているように見えますが、PublishPopupこのタイプの「ビューが初期化されたらコードを実行する必要がある」シーケンスを処理する適切な方法を知りたいと思います。

誰かがこれを処理するためのより良い方法を知っていますか?

4

2 に答える 2

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");
}
于 2012-10-15T18:15:29.653 に答える
5

同時にロードされる2つの異なるビューがあります-ダッシュボードビューとTridionダッシュボードビュー。Tridionダッシュボードビューは、リボンツールバーの[SDLTridion]タブをクリックしたときに表示されるものです。実際、このビューにはgetIdメソッドがありません(これは奇妙なことですが)。そのため、この問題が発生します。

それでも、configuratonファイルのファイルグループの背後にある全体的な考え方は、ビューごとに読み込まれるjavascriptの量を最小限に抑え、不要なjavascript処理を最小限に抑えることです。したがって、JavaScriptファイルを分割して、必要な場合にのみロードすることをお勧めします。

于 2012-10-16T07:35:02.617 に答える