Jadeテンプレートエンジン入門チュートリアル
13942 ワード
Jadeは高性能で分かりやすいテンプレートエンジンで、JadeはHamlのJavascriptで実現され、サービス側(NodeJS)やクライアントでサポートされています.
機能クライアントは をサポートする.超強力な可読性 柔軟で使いやすいインデント ブロック拡張 コードは、セキュリティを強化するためにデフォルトで符号化処理される .コンパイルおよび実行時のコンテキストエラーレポート コマンドラインコンパイルサポート HTML 5モード(使用!!!5ドキュメントタイプ) オプションメモリキャッシュ 動的および静的タグクラス を結合するフィルタ解析ツリーによる処理 はExpress JS をサポートする. each透明なループobjectsを用いてarraysはオブジェクト を列挙することもできない.ブロック注釈 タグプレフィックス は不要である. ASTフィルタ フィルタ :sassはsass.js をインストールする必要があります.:lessはless.js をインストールする必要があります.:markdownはmarkdown-jsまたはnode-discount をインストールする必要があります. :cdata :coffeescript coffee-script をインストールする必要があります.
Vim構文ファイル TextMateパッケージ Screencasts
その他の言語実装 php Scala Ruby
インストール
npm経由:
ブラウザのサポート
jadeは、次のコマンドでクライアントブラウザに互換性のあるファイルにコンパイルできます.
または、npmでuglifyjs(npminstalluglify-js)をインストールした場合は、次のコマンドで2つのファイルを同時に作成できます.
公開API
Options実行役割ドメイン(this)scope ローカル変数オブジェクトlocals 異常およびキャッシュ処理時にfilename を使用 Javascriptをファイル名でメモリにキャッシュするcache 出力生成されたタグと関数体debug jadeデフォルトコンパイルエンジンcompiler を置き換える
構文
行末
解析前にCRLFとCRをLFに変換する.
マーク
タグは行の最初の単語です.
タグにはidもあります.
これはとしてレンダリングされます.
クラスの処理方法
レンダー:
複数のclass?しかもid?
レンダー:
総書きdivは確かにうるさいので、省略できます.
出力:
タグテキスト
テキストの内容をタグの後ろに置くだけです.
内挿法?はい、両方のタイプのテキストは内挿法を使用できます.{locals:{name:{1回',email:'xianlihua[at]gmail.com}}に転送すると、次のようにできます.
出力:
何らかの理由で#{}を出力する必要がありますか?転義の:
これにより,
反転義変数も使用できます!{html}次のコードはscriptタグを出力します.
テキストを含むネストされたタグは、テキストブロックを使用することもできます.
または、タグテキストを直接使用します.
script、style、textareaなどの純粋なテキストのタグのみを受け入れるには、先頭の|文字は必要ありません.たとえば、次のようにします.
代替案として、ポイント記号'.'を使用できます.などのテキストブロックを表します.
出力:
点呼するとタグとの間にスペースがあり、Jadeが解析すると無視され、テキストとして処理されます.
出力:
コメント
一方通行注釈は現在Javascriptと一致しているように見えます.つまり、一方通行注釈の内容は同じ行に配置する必要があります.
次のように出力されます.
Jadeは、横棒を1つ追加するだけで、非バッファコメントもサポートします.
出力:
ブロックコメント
ブロックコメントは、インデントに基づいて処理されます.
出力:
Jadeは、次のような条件コメントもサポートします.
出力:
ネスト
Jadeは、ネストによって自然にタグを定義することをサポートします.
ブロック拡張
ブロック拡張では、単一ローの簡潔なネストタグを作成できます.次の例は、前例の出力と同じです.
とくせい
現在、Jadeは'('と')'の特性デリミタをサポートしています.
また、分割子として、コロン(:)を使用することもできます.
Booleanの機能もサポートされています.
値が変数のBooleanプロパティは、値がtrueの場合にのみ出力されます.
複数行に分割しても正常に解析できます.
ドキュメントの種類
利用!!で行ないます.
遷移ドキュメントタイプが出力されますが、次のようになります.
HTML 5のドキュメントタイプが出力されます.デフォルトで定義されているドキュメントタイプは、簡単に拡張できます.
デフォルト値を変更するには、次の手順に従います.
フィルタ
フィルタはコロン(:)を接頭辞として使用します.たとえば、markdownはテキストを関数として処理します.(注1:Smartyのような変数レギュレータ)、このページの最初に現在Jadeがサポートしているフィルタがリストされます.
レンダリング後:
フィルタは解析ツリーを処理することもできます.通常、フィルタはテキストブロックを正常に処理できますが、ルールに入力されたブロックフィルタによって何でもできます.
コード#コード#
Jadeは現在、3種類の実行可能コードをサポートしています.1つ目は-を接頭辞とし、バッファされません.
これは、条件またはループに使用できます.
Jadeのバッファリング技術のため、次のコードは有効です.
さらに詳細な反復サイクル:
あなたが望んでいることは何でも実現できます!
次に、戻り値をバッファリングするバッファコードを意味し、接頭辞として等号(=)を使用します.
出力:barbar .'='バッファリングされたコードは、デフォルトでエスケープされてセキュリティが強化されます.エスケープの値として出力するには使用する必要があります!=:
「vanilla」Javascriptの使用を許可する例外は、次の形式で表されるeachタグです.
ループ配列を実装する例:
出力:
オブジェクトを循環するキーと値:
これはfoo:bar を出力します.
ネストされたループも実行できます.
属性がundefinedの場合、Jadeは空欄を出力します.たとえば、次のようにします.
最近のJadeバージョンではundefinedではなく空の文字列が出力されます.
コマンドラインツールこまんどらいんつーる:bin/jade bin/jade
htmlを標準出力(stdout):
examples/*を生成します.html :
入力パラメータ:
機能
その他の言語実装
インストール
npm経由:
npm install jade
ブラウザのサポート
jadeは、次のコマンドでクライアントブラウザに互換性のあるファイルにコンパイルできます.
$ make jade.js
または、npmでuglifyjs(npminstalluglify-js)をインストールした場合は、次のコマンドで2つのファイルを同時に作成できます.
$ make jade.min.js
公開API
var jade = require('jade');
//
jade.render('.csser.com ', { options: 'here' });
//
jade.renderFile('path/to/csser.com.jade', { options: 'here' }, function(err, html){
// options
//
});
//
var fn = jade.compile('string of jade', options);
fn.call(scope, locals);
Options
構文
行末
解析前にCRLFとCRをLFに変換する.
マーク
タグは行の最初の単語です.
html
タグにはidもあります.
div#container
これはとしてレンダリングされます.
クラスの処理方法
div.user-details
レンダー:
複数のclass?しかもid?
div#foo.bar.baz
レンダー:
総書きdivは確かにうるさいので、省略できます.
#foo
.bar
出力:
タグテキスト
テキストの内容をタグの後ろに置くだけです.
p wahoo!
wahoo!.
クールですが、大きなテキストをどのように処理しますか?
p
| foo bar baz
| rawr rawr
| super cool
| go jade go
foo bar baz rawrとしてレンダリング.....
内挿法?はい、両方のタイプのテキストは内挿法を使用できます.{locals:{name:{1回',email:'xianlihua[at]gmail.com}}に転送すると、次のようにできます.
#user #{name} <#{email}>
出力:
1回<xianlihua[at]gmail.com>
何らかの理由で#{}を出力する必要がありますか?転義の:
p \#{CSSer, Javascript }
これにより,
#{CSSer,Javascript技術に注目}
反転義変数も使用できます!{html}次のコードはscriptタグを出力します.
- var html = "<script></script>"
| !{html}
テキストを含むネストされたタグは、テキストブロックを使用することもできます.
label
| Username:
input(name='user[name]')
または、タグテキストを直接使用します.
label Username:
input(name='user[name]')
script、style、textareaなどの純粋なテキストのタグのみを受け入れるには、先頭の|文字は必要ありません.たとえば、次のようにします.
html
head
title CSSer, Web
script
if (foo) {
bar();
} else {
baz();
}
代替案として、ポイント記号'.'を使用できます.などのテキストブロックを表します.
p.
foo asdf
asdf
asdfasdfaf
asdf
asd.
出力:
<p>foo asdf
asdf
asdfasdfaf
asdf
asd
.
</p>
点呼するとタグとの間にスペースがあり、Jadeが解析すると無視され、テキストとして処理されます.
p .
出力:
<p>.</p>
コメント
一方通行注釈は現在Javascriptと一致しているように見えます.つまり、一方通行注釈の内容は同じ行に配置する必要があります.
//
p foo
p bar
次のように出力されます.
<!-- -->
<p>foo</p>
<p>bar</p>
Jadeは、横棒を1つ追加するだけで、非バッファコメントもサポートします.
//-
p foo
p bar
出力:
<p>foo</p>
<p>bar</p>
ブロックコメント
ブロックコメントは、インデントに基づいて処理されます.
body
//
#content
h1 CSSer, Web
出力:
<body>
<!--
<div id="content">
<h1>CSSer, Web </h1>
</div>
-->
</body>
Jadeは、次のような条件コメントもサポートします.
body
/if IE
a(href='http://www.mozilla.com/en-US/firefox/') Get Firefox
出力:
<body>
<!--[if IE]>
<a href="http://www.mozilla.com/en-US/firefox/">Get Firefox</a>
<![endif]-->
</body>
ネスト
Jadeは、ネストによって自然にタグを定義することをサポートします.
ul
li.first
a(href='#') foo
li
a(href='#') bar
li.last
a(href='#') baz
ブロック拡張
ブロック拡張では、単一ローの簡潔なネストタグを作成できます.次の例は、前例の出力と同じです.
ul
li.first: a(href='#') foo
li: a(href='#') bar
li.last: a(href='#') baz
とくせい
現在、Jadeは'('と')'の特性デリミタをサポートしています.
a(href='/login', title='View login page') Login
また、分割子として、コロン(:)を使用することもできます.
a(href: '/login', title: ' CSSer.com ') Login
Booleanの機能もサポートされています.
input(type="checkbox", checked)
値が変数のBooleanプロパティは、値がtrueの場合にのみ出力されます.
input(type="checkbox", checked: someValue)
複数行に分割しても正常に解析できます.
input(type='checkbox',
name='agreement',
checked)
ドキュメントの種類
利用!!で行ないます.
!!!
遷移ドキュメントタイプが出力されますが、次のようになります.
!!! 5
HTML 5のドキュメントタイプが出力されます.デフォルトで定義されているドキュメントタイプは、簡単に拡張できます.
var doctypes = exports.doctypes = {
'5': '<!DOCTYPE html>',
'xml': '<?xml version="1.0" encoding="utf-8" ?>',
'default': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',
'transitional': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',
'strict': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">',
'frameset': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">',
'1.1': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">',
'basic': '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">',
'mobile': '<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.2//EN" "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd">'
};
デフォルト値を変更するには、次の手順に従います.
jade.doctypes.default = 'whatever you want';
フィルタ
フィルタはコロン(:)を接頭辞として使用します.たとえば、markdownはテキストを関数として処理します.(注1:Smartyのような変数レギュレータ)、このページの最初に現在Jadeがサポートしているフィルタがリストされます.
body
:markdown
Woah! jade _and_ markdown, very **cool**
we can even link to [CSSer](http://www.csser.com)
レンダリング後:
<body><p>Woah! jade <em>and</em> markdown, very <strong>cool</strong> we can even link to <a href="http://www.csser.com">CSSer</a></p></body>
フィルタは解析ツリーを処理することもできます.通常、フィルタはテキストブロックを正常に処理できますが、ルールに入力されたブロックフィルタによって何でもできます.
body
conditionals:
if role == 'admin'
p You are amazing
else
p Not so amazing
コード#コード#
Jadeは現在、3種類の実行可能コードをサポートしています.1つ目は-を接頭辞とし、バッファされません.
- var foo = 'bar';
これは、条件またはループに使用できます.
- for (var key in obj)
p= obj[key]
Jadeのバッファリング技術のため、次のコードは有効です.
- if (foo)
ul
li yay
li foo
li worked
- else
p oh no! you are not in csser.com
さらに詳細な反復サイクル:
- if (items.length)
ul
- items.forEach(function(item){
li= item
- })
あなたが望んでいることは何でも実現できます!
次に、戻り値をバッファリングするバッファコードを意味し、接頭辞として等号(=)を使用します.
- var foo = 'bar'
= foo
h1= foo
出力:bar
p!= aVarContainingMoreHTML
「vanilla」Javascriptの使用を許可する例外は、次の形式で表されるeachタグです.
- each VAL[, KEY] in OBJ
ループ配列を実装する例:
- var items = ["one", "two", "three"]
- each item in items
li= item
出力:
<li>one</li>
<li>two</li>
<li>three</li>
オブジェクトを循環するキーと値:
- var obj = { foo: 'bar' }
- each val, key in obj
li #{key}: #{val}
これは
ネストされたループも実行できます.
- each user in users
- each role in user.roles
li= role
属性がundefinedの場合、Jadeは空欄を出力します.たとえば、次のようにします.
textarea= user.signature
最近のJadeバージョンではundefinedではなく空の文字列が出力されます.
<textarea></textarea>
コマンドラインツールこまんどらいんつーる:bin/jade bin/jade
htmlを標準出力(stdout):
jade examples/*.jade --pipe
examples/*を生成します.html :
jade examples/*.jade
入力パラメータ:
jade examples/layout.jade --options '{ locals: { title: "CSSer" }}'