2012-11-04 9 views
7

私はサイトワイドを含めるローカルの静的なJavascriptファイルを持っています。私は、すべての静的なJavascriptファイルを1つのファイルに結合することをお勧めしますが、これらのファイルを別々に管理したいと考えています。 Yesodプロジェクトに静的なJavascriptファイルを含める必要がありますか?Yesodプロジェクトに静的なjavascriptを含める場所は?

答えて

14

もっと具体的な解決策があります。

  • 静的なJavascriptファイル用のフォルダが '' static/js ''にあります。非識別子文字を置き換える、すべての静的ファイルの場合addScript

  • the Static subsite generates a "::Route Static" symbol

  • は、Javascriptのためのより具体的なウィジェットコマンドがあります "/ - 。" '' static ''のファイルパスに '_'をつけてください。

サンプル:あなたのプロジェクトが部分的にコンパイルされている場合は

import Yesod.Widget (addScript) 

-- given a file path of static/js/my-script.js 

addScript $ StaticR js_my_script_js 

、次のようなエラーが出ることがあります。

Foundation.hs:...: Not in scope: `js_my_script_js' 

その後のいずれか

  • UNIXタッチ

  • やビルドをきれいにし、それを再構築staticFilesを呼び出すことにより、ルートシンボルを生成し、それが消えStaticFiles.hsモジュール。

乾杯!

あなたは私の/(あなた)wikipedia articleでもそれについて読むことができます。自由に修正して完了してください。

+0

足場を使用していないときにもこれは機能しますか? – timwaagh

2

defaultLayout関数でaddWidgetを使用してウィジェットに追加することができます。これを1つのファイルに結合します。例えば

defaultLayout widget = do 
    ... 
    pc <- widgetToPageContent $ do 
     $(widgetFile "mywidget") 
     ... other stuff here ...  

    ... 

は今、単にテンプレートディレクトリにmywidget.juliusというファイルを置いて、それが自動的にすべてのページに含まれるべきです。

+0

この作品のおかげで、これで唯一の問題は、そのページの特定のjavascriptもコンパイルされたJavaScriptファイルに含まれています。動作を無効にする方法があるかどう – Joost

+0

はええ、それは...ウィジェット事が何をするか全くわからないのです@Joost。それはブラウザが一度にすべてのスクリプトをキャッシュすることができ、あまりにもリクエストの数を減らすことができますので、私は、それはほとんどの場合、大したことはないと思います。 –

関連する問題