
寒い4月1日、ウラル山脈ではまだ雪が溶けていません。 暗くなってきました。 私はマイクロパターンで遊んだ。 例: ejohn.org/blog/javascript-micro-templatingそれらはすべてのテストですべて非常に生産的でしたが、同時に少なくとも多少の深刻な機能が欠けていました。
最後のストローは、js1kを見逃したことです。 あることが別のことにつながった。 そして、面白いアイデアが思いつきました。 JSを最大限に活用してみませんか? テンプレートでJS構文(JSエンジンを使用してテンプレートを解析できる)を使用し、JSのすべての機能を使用します。
その結果、非常に単純な構文のテンプレートエンジンが作成されました。
[TAG] raw(データ:文字列)| 変数[TAG] [タグ] .b [タグ] .e [TAG] raw(データ:文字列)
これは次のようになります。
function _template() { div.b; span.context.value.span; span.raw(11).span; div.e; hr; raw('plain text') }
div.b->開始タグ-> <div> div.e->終了タグ-> </ div> div.context.value.div-> <div> {{context.value}} </ div> hr->自己終了タグ-> <hr />
一種のDSLになります。
そして、どのサイズのコードですか?
30行のコード:)縮小版の話ではありません。
例?
// - // JS ( ) var data = [ { name: 'STAN' }, { name: 'Ai_boy' }, { name: 'IceFrog' } ]; // function _template(){ // [ ] XML h1['class="head"'].raw('List of names').h1; for (var i = 0; i < context.length; i++) { // partial(_item, context[i]); } } // Partial - function _item(){ b[args({style: 'color: blue', class: 'test'})].raw("Name:").b; div.context.name.div; hr; } // helper // - js function args(obj){ var result = ''; for (var key in obj) { if (obj.hasOwnProperty(key)) { result += key + '="' + obj[key] + '" '; } } return result; } document.body.innerHTML = STAN.run(STAN.compile(_template), data);
開始方法
サイトにアクセスして、サンドボックスでプレイできます
aiboy.github.io/STAN/sandbox.html
または、GitHubページに移動し、README.mdの指示に従ってください
github.com/aiboy/STAN
(ブラウザとNode.jsの両方でテンプレートエンジンを使用できます)
プラスとは何ですか?
主に次の4つの利点があります。
1)JS構文とそのすべての機能(CoffeeScript、ClosureScript、TypeScript ... ect)の完全サポート
2)テンプレートのレンダリング時のDOMへのアクセス。
3)テンプレート内のすべてのJSライブラリ(lodash、アンダースコア、jquery ... ect)の完全サポート
4)任意のテキストエディターでのテンプレートのサポート-実際には純粋なJS構文であるため
速度はどうですか?
jsperf.com/stan-speed-test
「コンパイル済み」テンプレートの速度(手動または自動で通常のjsファイルに変換される)は、JavaScriptの速度とほぼ同じです:)これは非常に悪くありません。 テンプレートを動的にコンパイルする場合、残念ながら速度はそれほど速くありません。
なぜZenコーディングをしないのですか?
Zen CodingをJS構文、つまりZen Codingで表現できないため、有効なJSにすることはできません。
これは冗談ですか?
アイデアの狂気/愚かさ(必要に応じて下線)にもかかわらず。 すべてが非常に深刻です。 プロジェクトが開発されます。 テスト、より正確な構文、および他の多くの利点で大きくなりすぎています。 GitHubページにアクセスしてください-あなたの願い、発見されたバグ、その他すべてを残してください。
PS:実際、このテンプレートエンジンはわずか30行で構成されていると書いているとき、私は少し心酔いしています。 正直に言うと、行40〜50をフォーマットします。 しかし、私にとってそれは、私が固守しようとする心理的な障壁です。
PPS:「メモの正確さとリテラシー」に関するコメントを歓迎します(ただし、これらすべてがPMで記述されている方が良いでしょう)
PPPS:気軽にコメントしてください。私は「嫌いな人-通り過ぎる人」ではありません:)