2012-11-04 6 views
7

Mam lokalny statyczny plik JavaScript, który chcę dołączyć do całej witryny. Preferuję, aby wszystkie statyczne pliki JavaScript były połączone w jeden plik, ale chcę zarządzać tymi plikami osobno. Gdzie powinny znajdować się statyczne pliki Javascript w projekcie Yesod?Gdzie umieścić statyczny javascript w projekcie Yesod?

Odpowiedz

14

Istnieje bardziej szczegółowe rozwiązanie.

  • Istnieje folder dla statycznych plików JavaScript w '' static/js ''.

  • Jest bardziej konkretne polecenie widget dla javascript: addScript

  • Dla każdego pliku statycznego, the Static subsite generates a "::Route Static" symbol, zastępując znaki inne niż identyfikator "/ -". z "_" w ścieżce do pliku z '' static/''.

Próbka:

import Yesod.Widget (addScript) 

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

addScript $ StaticR js_my_script_js 

Jeśli projekt jest częściowo skompilowana, może pojawić się komunikat o błędzie, jak:

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

wówczas

  • UNIX dotknąć moduł StaticFiles.hs, który generuje symbole trasy, wywołując staticFiles

  • lub wyczyść kompilację i odbuduj ją, a następnie znika.

Pozdrawiam!

Możesz przeczytać o tym także na mój/(twój) wikipedia article. Możesz go poprawić i uzupełnić.

+0

Czy to też działa, gdy nie używasz rusztowania? – timwaagh

2

Możesz użyć addWidget w swojej funkcji defaultLayout, aby dodać ją do widgetów, które są połączone w jeden plik.

Na przykład

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

    ... 

Teraz wystarczy umieścić plik o nazwie mywidget.julius do katalogu szablonów i powinno być automatycznie włączone na wszystkich stronach.

+0

Dzieki temu działa tylko problem z tym, że w skompilowanym pliku javascript znajduje się również specyficzny dla strony javascript. – Joost

+0

@Joost tak, to jest to, co robi widżet. Nie jestem do końca pewien, czy istnieje sposób na obejście tego zachowania. Nie wydaje mi się, żeby w większości przypadków była to wielka sprawa, ponieważ pozwoli przeglądarkom buforować wszystkie skrypty za jednym razem i zmniejsza również liczbę żądań. –