« IE9がJSON最後のカンマを認めたようだ | トップページ | 「プログラマー向けIME自動確定制御」とか »

2012.01.20

[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)のだけど、適用されるスタイルの優先順位が逆になるだけですし、妙に見た目がおかしくなっても困るから、とりあえず放置。

|

« IE9がJSON最後のカンマを認めたようだ | トップページ | 「プログラマー向けIME自動確定制御」とか »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/94026/53778701

この記事へのトラックバック一覧です: [symfony] javascriptの読み込み位置(use_javascript と include_javascripts):

« IE9がJSON最後のカンマを認めたようだ | トップページ | 「プログラマー向けIME自動確定制御」とか »