[symfony] javascriptの読み込み位置(use_javascript と include_javascripts)
Symfonyのテンプレートで外部javascriptを読み込むときは、 use_javascript という組み込みのヘルパーを使えって?それはえらいすんません。でもね、scriptタグで読み込んでる時はちゃんと動いていたんだけれど、use_javascript 使ったら、動かなくなったってーこれはどういうこっちゃろうか?
具体的には、併用しているはずのjQueryがありませんよというエラーが発生。
どうやら取り込み位置がおかしいようだ。HEADを覗くとjQueryより前に依存しているスクリプトが取り込まれている。確かにこれでは動かないが、どうしてこうなるのか?
use_javascriptで検索してみると、Symfonyのチュートリアルの4日目がヒット。読んでみたら、use_javascript とは別に、include_javascripts というヘルパーがあって、なぜかはっきりと書かれていないけど、use_javascript ヘルパーでスクリプトを読み込む位置を指定するみたい。多分これやなと。
ていうか、組み込みのヘルパーのリファレンスって、なんで検索で出てこない?存在しないのかな。チュートリアルを悠々とやっている時間は無いのだと何度言ったら(Ry
ということで、templates/layout.phpを盛大に開いてみると、jQueryはscriptタグでベタに取り込んであって、案の定それよりも前に include_javascripts が置かれていた。
<head>
<?php include_javascripts() ?>
<script
src="/jquery-ui/js/jquery-1.3.2.min.js"
type="text/javascript"></script>
</head>
チュートリアルには「パフォーマンスの問題からbodyの閉じタグの直前に include_javascripts を置いておくとよい」と書いてあるけど、関わっているのが途中参加のそれなりに大きい業務システムで、他に影響が出ると責任持てないから、headの閉じタグ直前へ移動。
<head>
<script
src="/jquery-ui/js/jquery-1.3.2.min.js"
type="text/javascript"></script>
<?php include_javascripts() ?>
</head>
結果、use_javascript でも正常動作するようになりました。でも本来は以下のようにするべきなんだろうな。
<head>
<?php include_javascripts() ?>
<?php use_javascript('/jquery-ui/js/jquery-1.3.2.min.js')" ?>
</head>
↑こうしておけば問題なかったはずだけど、前任者さんはそんなヘルパーは知らなかったんだろう。他でも use_javascript は一つも使われていなかった。
同じ懸念はCSSでもある(use_stylesheet と include_stylesheets)のだけど、適用されるスタイルの優先順位が逆になるだけですし、妙に見た目がおかしくなっても困るから、とりあえず放置。
| 固定リンク



コメント