[DikeJS]jsテンプレート技術について、requireJS定義モジュールを使用する(二)
2156 ワード
昨日は第一版のテンプレートラベルの代替コードを作成しましたが、足りないところがたくさんあります.
1:正則はテンプレートに存在するスペースの問題にマッチできません.
2:属性項目に存在しないタブを削除できませんでした.
昨日の不足によって修正した後、新しいテンプレートの交換方法は以下の通りです.
1:正則はテンプレートに存在するスペースの問題にマッチできません.
2:属性項目に存在しないタブを削除できませんでした.
昨日の不足によって修正した後、新しいテンプレートの交換方法は以下の通りです.
/**
* @Author Dike.Li
* @Date 2015/7/30
* @Description Template Label Replace
*/
define(function (require, exports, module) {
/**
* {id} option {id:123}
* @param temp
* @param option
* @returns {*}
* @constructor
*/
var Template = function (temp, option) {
/**
* XXX='{XXX}' || XXX="{XXX}"
* @type {RegExp}
*/
var regExp = new RegExp('[a-zA-Z]+[\\s]*=[\\s]*[\"\']\\{[^\\{\\}]+\\}[\"\']', '\g');
/**
* XXX
* @type {RegExp}
*/
var regExpAttribute = new RegExp('[a-zA-Z]+', '\g');
/**
* {XXX}
* @type {RegExp}
*/
var regExpLable = new RegExp('\\{[^\\{\\}]+\\}', '\g');
/**
* XXX='{XXX}' || XXX="{XXX}"
* @type {Array|{index: number, input: string}|*}
*/
var alArr = temp.match(regExp);
/**
* option ,
*/
for (var al in alArr) {
/**
*
*/
var attribute = alArr[al].match(regExpAttribute)[0];
/**
*
*/
var label = alArr[al].match(regExpLable)[0];
if (typeof(option[attribute]) === 'undefined' ||
option[attribute] === null ||
option[attribute] === 'null' ||
option[attribute] === '') {
temp = temp.replace(alArr[al], '');
continue;
}
temp = temp.replace(label, option[attribute]);
}
/**
*
* @returns {*}
*/
Template.prototype.getTemp = function () {
return temp;
};
};
module.exports = Template;
});