2012-03-30 19 views
10

とのダイナミックなCSSの書き方:は、私はそうのような、ジェイドを使用して、いくつかの動的なCSSを書き出すしようとしているジェイド

style(type='text/css') 
    each item in colors 
     .#{item.class} { background-color : #{item.background}; color: #{item.foreground}; } 

しかし、これは次のエラーを与える:

ReferenceError: media='print') 
    7| style(type='text/css') 
    > 8|  - for(var item in colors) 
    9|   .#{item.class} { background-color : #{item.background}; color: #{item.foreground}; } 
    10| block Content 
    11|  include scheduleTemplate 

item is not defined 

私はスタイルを削除した場合タグ、それはうまくレンダリングします。スタイルブロック内で反復を使用する方法はありますか?

+0

'style'と' script'はテキストのみを受け入れる必要があります。なぜあなたの反復を解析しようとしているのか分かりません。 –

+0

これは、インターアクションを解析していないので、ローカル変数として 'item'を解決しようとしています。ビューに渡された変数は引き続き参照できますが、そのスクリプトブロック内で生成された変数は参照できません。 –

答えて

10

styleタグは翡翠でのみテキストを許可するため、each item in colorsをプレーンテキストとして扱います。次に、#{item.class}が見つかり、それを解析しようとしますが、前の行にitemが定義されていないため失敗します。

残念ながら、私は玉の中でこれを行うには良い方法があるとは確信していません。あなただけのJSに事前にあなたのCSSのすべてを定義し、そのようにそれを挿入する必要があります:

style(type='text/css') 
    #{predefined_css} 

その時点で、しかし、それだけで生成されます外部スタイルシートにスタイルを移動する方が簡単かもしれませんいくつかの合理的なキャッシュヘッダーでそれを提供します。それはJadeに動的なCSSをさせて、その後のページの読み込みをユーザーにスピードアップさせようとすることによる困難を避けるでしょう。

+1

ええ - それは私が恐れていたものです。私は顧客ごとのCSSファイルを書き出し、それらを動的に参照することになりました。ご協力いただきありがとうございます! –

3

スタイラスを使用できます。それは翡翠を作ったのと同じ人々によって作られており、理由のなかで翡翠とほとんど同じです。

0

PHPで行ったのと同様に、ルートに応じてbodyタグに特定のクラスを追加したいという同様の問題が発生しました。結局、jadeのテンプレート継承を使って同様の結果を得ました。

1

別の方法は、独自のcssスタイルシートをインポートすることです。 Jade docでは、あなたは、このようなコードを使用してスタイルシートを含むことができることが確認できます。

html 
    head 
    style 
     include style.css 

次に、あなたが参照できる別のファイルに任意のCSSを定義することができます。

関連する問題