最小構成TemplateEngineというかただの変数展開
コンストラクタで${変数名}が埋め込まれた文字列を渡してテンプレートを初期化、
mergeメソッドの引数でオブジェクトを渡してやると変数展開する
というだけのもの。
ソース
var MiniTemplate = function(template){ this.template = eval(['([\'',template.replace(/\$\{([^${}]+)\}/g,'\',{key:\'$1\'},\''),'\'])'].join('')); }; MiniTemplate.prototype.merge = function(context){ var template = this.template || []; var temp = []; for(var i = 0; i < template.length; i++){ if(typeof template[i] == 'string'){ temp.push(template[i]); }else if(typeof template[i] == 'object' && typeof template[i]['key'] == 'string'){ temp.push(context[ template[i]['key'] ]); } } return temp.join(''); }
使用例
var hoge = new MiniTemplate('子曰く、${fuga}は${foo}の${bar}を盗んでいきました。'); var piyo = new MiniTemplate('${fuga}は${foo}'); console.log(hoge.merge({'fuga':'魔理沙','foo':'アリス','bar':'大変なもの'})); //子曰く、魔理沙はアリスの大変なものを盗んでいきました。 console.log(hoge.merge({'fuga':'魔理沙','foo':'パチュリー','bar':'大切な本'})); //子曰く、魔理沙はパチュリーの大切な本を盗んでいきました。 console.log(piyo.merge({'fuga':'うどんげ','foo':'ぱんつはいてない'})); //うどんげはぱんつはいてない