3

SilverStripe 3.0 CMSを使用していますが、CMSにGoogleマップを含める必要があります。

私はこの手順に従っていますが、少し古いだけでなく、公式ドキュメントでは現在のバージョンのSilverStripeと同じ方法を使用しています(少なくとも現在のバージョンのドキュメントのようです)。

問題はコードのこの部分にあります:

Behaviour.register({ 
    "#Form_EditForm" : { 
        initialize : function() { 
            this.observeMethod("PageLoaded", this.adminPageHandler); 
            this.adminPageHandler(); 
        }, 
        adminPageHandler : function() { 
            initialize(); 
        } 
    } 
}); 

まず第一に、振る舞いは定義されていませんでした。フレームワーク内にあるbehaviour.jsファイルを手動で含める必要がありました。しかし今、私はタイプエラーを受け取ります:

this.observeMethod is not a function

誰かがSilverStripeCMSでページエディタを開いたときにjavascript関数を呼び出すために何ができるかについてのヒントを教えてもらえますか?

4

3 に答える 3

6

あなたが言及した「Behaviour.register」呼び出しは完全に非推奨であり、コアコードでは使用できなくなったため、ここでドキュメントを更新する必要があります。

残念ながら、この動作を置き換えるための文書化された方法を見つけることができませんでしたが、今のところ、あなたが直接言及したフォーラム投稿のアプローチに基づいて、以下があなたのために働くはずです:

ここに追加された「initGoogleMaps.js」スクリプトを見つけます。

function getCMSFields() { 
Requirements::javascript('mysite/javascript/initGoogleMaps.js');  
...

このスクリプト内でBehaviour.register...ブロックを削除し、initialize関数をdocument.readyのに移動して(または単にdocument.ready部分を削除して)、initializeグローバルに使用できるようにします(名前を変更することを検討してください)。

次に、内部に次を追加しますgetCMSFields

$fields->addFieldToTab('Root.Content', new LiteralField('js', '<script>initialize();</script>'));

これによりinitialize、ページの「編集ビュー」がCMS内にレンダリングされるたびに関数が呼び出されるようになります。

hth

于 2012-08-17T10:49:29.160 に答える
3

ベンが言ったように、

LeftAndMain::require_javascript('mysite/javascript/initGoogleMaps.js') 

「必要に応じて含める」よりも信頼性が高くなります。なんで?SilverstripeはAjaxを使用するため、最初のロードでjavascriptまたはcssをロードすることをお勧めします。これにより、ajaxを利用した環境でCMS内のさまざまなモデル管理領域に移動したときにすぐに使用できるようになります。開始時にロードしないと、不整合が発生し、その管理領域をハードロードしないとjs、cssファイルがロードされません。

ドキュメントから: http: //doc.silverstripe.org/framework/en/reference/requirementsおよびhttp://api.silverstripe.org/3.0/class-LeftAndMain.html

「必要なときに含める」ということは、CMSなどの領域でいくつかの弱点を示しています。CMSでは、Ajaxを使用してアプリケーションの大部分をロードし、CSSとJavaScriptをさらに含める必要がある可能性があります。この段階での唯一の回避策は、必要なものがすべて最初のページ読み込みに含まれていることを確認することです。

1つのアイデアは、Ajax応答のヘッダーに含める必要があるCSSとJavaScriptに言及することです。これにより、クライアントはAjax要求の完了時にこれらのスクリプトとスタイルシートをロードできます。これは非常にきれいにコーディングできますが、最良の結果を得るには、Ajaxシステムに独自の変更を加えてprototype.jsを拡張し、すべてのスクリプトがこれを一貫してサポートできるようにします。

ちなみに、この行の理想的な場所は、ニーズに応じて、カスタムモジュールまたはmysiteの_config.phpです。

于 2014-08-28T01:19:37.137 に答える
0
LeftAndMain::require_javascript('mysite/javascript/initGoogleMaps.js') 

はるかにうまくいくだろう

于 2013-01-09T00:14:55.163 に答える