JavaScriptのテンプレートエンジンを作ってみる

■ このスレッドは過去ログ倉庫に格納されています
11
垢版 |
2019/03/05(火) 00:50:27.87ID:8a3k8XPA
よ?
21
垢版 |
2019/03/06(水) 17:34:50.45ID:1pbO3u+T
まずはライブラリの名前を決めた
31
垢版 |
2019/03/06(水) 23:20:38.72ID:1pbO3u+T
サンプル(1)

<!doctype html>

<html lang="ja" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="../lib/biew.js"></script>
<script src="./test.js"></script>
</head>
<body biew:canvas="page" biew:id="body">
<section biew:id="section">
<h1 biew:id="heading1">この要素はHeading Element1です。</h1>
<h2>{{ heading2 }}</h2>
<h3 biew:id="heading3">薬草は<span>{{ heading3.gold }}</span>Gです。</h3>
</section>
</body>
<html>
41
垢版 |
2019/03/06(水) 23:22:11.81ID:1pbO3u+T
サンプル(1)test.js

var page = new Biew.Canvas(); // <body biew:canvas="page">

page.draw = function(node){
page.body.setAttr("style", "background-color:#8888FF;"); // bg blue.
page.section.setAttr("style", "background-color:#CCCCCC; width:512px;"); // bg grey.

var h1 = page.heading1; // true === (h1 instanceof Biew.Element)
h1.setText("テンプレートエンジンのサンプル");

var h2 = page.heading2;
h2.setText("Hello World!");
h2.setAttr("style", "background-color:#FFFFFF;");

var h3 = page.heading3;
h3.setAttr("style", "color:white; background-color:black;"); // font white, bg black.
h3.gold.setText("8");
h3.gold.setAttr("style", "color:#66FF66;"); // font grean.
};

window.onload = function(){
Biew.init();
Biew.draw();
};
51
垢版 |
2019/03/06(水) 23:25:49.76ID:1pbO3u+T
before
https://i.imgur.com/M50tGE3.png

after
https://i.imgur.com/NeDBdGo.png
61
垢版 |
2019/03/08(金) 00:59:23.45ID:kMybevyH
上記のサンプルを解説

1.
属性(biew:canvas)が付加された要素内を一括に再描画する
要素のクローンがfunction draw(node)に引数として渡され、
DOM操作されたクローンがHTMLFragmentとして差し替えられる

2.
属性(biew:id)の値と同じ名前の変数に、対となるHTMLElementが代入される
<h2>の{{変数名}}はTextNodeの代入ではなく<h1>と同じように、
要素を変数に代入する糖衣構文である
<h3>では<h1>と<h2>の例を組み合わせて文字列と属性を変更した
71
垢版 |
2019/03/16(土) 23:01:43.70ID:Jt4TMHpi
Vue, Reactみたいな双方バインディングを作りたかったけど簡単には作れないや
2019/03/23(土) 08:25:09.46ID:xbtzdLRS
HTMLはやめてJSONなどJSで完結できるようにして
91
垢版 |
2019/03/25(月) 21:40:09.75ID:ci2yIkxV
HTMLはやめるってHTML内にif else forとかの独自属性をごてごて埋め込むことかな?
id属性とか{{name}}でHTML内のタグの位置を特定するのだけは必要だと思う
そうじゃないとjQueryみたいにセレクタを使うことになるから
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況