artTemplate 是js的一个模板,在页面调用api接口的时候,渲染数据很有帮助,有了它,事半功倍,但是需要学习成本。
今天我们在项目中使用了这个模板,记录一下
这里有两篇非常不错的文档,记录下来,方便以后查看
https://www.jianshu.com/p/b5dffff259be
https://www.jianshu.com/p/e7f3d0c93ed3
artTempplate 使用封装插件 这样更加方便便捷
define(['template'], function (require, exports, module) { var template = require('template'); //模板中使用的方式: // {{time | dateFormat:'yyyy-MM-dd hh:mm:ss'}} template.helper('formatdate', function (date, format) { return formatDate(date * 1000, format); }); template.helper('str_repeat', function (num, repeatStr) { return repeatStr.repeat(num); }); template.helper('isempty', function (str) { return isUndefined(str) || str.length == 0 ? true : false; }); template.helper('empty_replace', function (val, repeatStr) { if (isUndefined(val) || val == '') val = repeatStr; return val; }); template.helper('str_replace', function (str, findStr, replace) { return str.replace(new RegExp(findStr, 'gmi'), replace); }); //判断是否有问号 {{time | has_wenhao}} template.helper('has_wenhao', function (str) { if (str.indexOf('?') >= 0) { return str + '&'; } else { return str + '?'; } }); /*template.helper('paidStatusText', function (data) { if(data == 'PAYING'){ return "<div style='color:#488ffa;'>付款中</div>"; }else if(data == 'UNPAY'){ return "<div style='color:#ff6666;'>未付款</div>"; }else if(data == 'PAID'){ return "<div style='color:#55be97;'>已付款</div>"; } });*/ //支持传入参数与嵌套使用: // {{time | say:'cd' | ubb | link}} /** * 模板封装 * @param id 模板id 必须是id 不能是class 或其他 * @param data 一个对象 * @param inserContainer 要插入的位置 如果没有传递,则返回模板渲染好的内容 * * @param callback * @returns {*} */ exports.template = function (id, data, inserContainer, callback) { var html = template(id, data); if (inserContainer === undefined) return html; else { if (typeof(inserContainer) === 'string') { $(inserContainer).html(html); } else if (typeof(inserContainer) === 'object') { $(inserContainer.distview, inserContainer.parentObj).html(html); } } if (callback != undefined) callback(); }; /** * 动态获取数据模板显示,为了解决整个页面刷新 * @param file * @param data * @param inserContainer 如果是一个对象,则获取里面中的值 * @param callback * @returns {*} */ exports.renderfile = function (file, data, inserContainer, callback) { var templateContent = ''; $.ajax({ url: file, async: false, success: function (htmldata) { templateContent = htmldata; } }); var reader = template.compile(templateContent); var html = reader(data); if (inserContainer === undefined) { return html; } else { if (typeof(inserContainer) === 'string') { $(inserContainer).html(html); } else if (typeof(inserContainer) === 'object') { $(inserContainer.distview, inserContainer.parentObj).html(html); } } if (callback != undefined) callback(); }; })
封装arttemplate方法
define(['template'], function (require, exports, module) { var template = require('template'); template.helper('formatdate', function (date, format) { return formatDate(date * 1000, format); }); });
模板中使用formate函数
{{each dataList.list as value}} <tr class="text-c"> <td><input type="checkbox" value="{{value.id}}" name=""></td> <td>{{value.id}}</td> <td>{{value.username}}</td> <td>{{value.fullname}}</td> <td>{{value.mobile}}</td> <td>{{if value.status==1}}<span class="label label-success radius">启用</span> {{else}}<span class="label label-danger radius">禁用</span> {{/if}} </td> <!--这里 就是 使用 formatdate 的方法--> <td>{{ if value.last_logintime==0}}-{{else}} {{ value.last_logintime |formatdate }} {{/if}}</td> <!--还可以这样使用--》 <td>{{ if value.last_logintime==0}}-{{else}} {{ formatdate(value.last_logintime)}} {{/if}}</td> <td>{{value.updatetime}}</td> <td>{{value.createtime}}</td>
if判断
{{if namesArry.length > 14}} <div style="position: absolute;left: 933px;top: 25px;"> <span>……</span> </div> {{/if}} {{if namesArry.length > 14}} <div style="position: absolute;left: 933px;top: 25px;"> <span>……</span> </div> {{else}} 不大于14个 {{/if}}
使用template.js
var jsTemplate = require('module/common/template'); var html = jsTemplate.template('form_data', data, '#form_data_container', function () { //这里是一个回调函数 做你想做的事情 //判断有没有 checkbox radio var iCheck = false; projectCommon.iCheck(); var column = responseData.column; for (var obj in column) { value = column[obj]; if (value.input_type == 'color') { exports.color('#' + value.input_name); } else if (value.input_type == 'date') { projectCommon.datetime(value.input_name, 'date'); } else if (value.input_type == 'datetime') { projectCommon.datetime(value.input_name, 'datetime'); } else if (value.input_type == 'start2end_datetime') { projectCommon.datetime(value.input_name, 'date', true); } else if (value.input_type == 'simple_html_text') { exports.setEditor(value.input_name, 'simple'); } else if (value.input_type == 'html_text') { exports.setEditor(value.input_name, 'all'); } //将php 验证转换为js验证 var validatetype = value.validate_type; validatetype = validatetype.trim('\\|', ''); var _tempAutoCheckRules = {}; var _tempAutoCheckMessage = {}; if (validatetype != '') { if (validatetype.indexOf('|') >= 0) { var validatetypeAttr = validatetype.split('|'); var validatetypeAttrLength = validatetypeAttr.length; var validateMessageAttr = (value.validate_message).split('|'); for (var q = 0; q < validatetypeAttrLength; q++) { var _tempVal = validatetypeAttr[q]; _tempAutoCheckRules[php_js_validateRelation[_tempVal]] = true; _tempAutoCheckMessage[php_js_validateRelation[_tempVal]] = isUndefined(validateMessageAttr[q]) ? validateMessageAttr[0] : validateMessageAttr[q]; } autoCheckRules[value.input_name] = _tempAutoCheckRules; autoCheckMessage[value.input_name] = _tempAutoCheckMessage; } else { _tempAutoCheckRules[php_js_validateRelation[validatetype]] = true; _tempAutoCheckMessage[php_js_validateRelation[validatetype]] = value.validate_message; autoCheckRules[value.input_name] = _tempAutoCheckRules; autoCheckMessage[value.input_name] = _tempAutoCheckMessage; } } } });
if语句
{{if value.options_multi_type==0}} - {{else}} {{ each options_multi_typeList as label i}} {{if label.id == value.options_multi_type }} {{label.title}}{{/if}} {{ /each }} {{/if}} <!--if 语句可以写 或的关系 --> {{ if(value.input_type=='html_text' || value.input_type=='simple_html_text')}}
arttemplate 提供变量赋值
{{if !dataval[value.input_name] }} <input name="{{value.input_name}}" type="checkbox" value="{{label.id}}" id="{{value.input_name}}-{{label.id}}" {{if label.id== dataval[value.input_name] }} checked {{/if}} > {{else}} <input name="{{value.input_name}}" type="checkbox" value="{{label.id}}" id="{{value.input_name}}-{{label.id}}" {{if label.id== value.default_value }} checked {{/if}} > {{/if}}
动态读取 value.input_name 的值 ,然后 从 dataval中获取
dataval[value.input_name]
var data = { 'column': responseData.column, 'dataval': isUndefined(responseData.value) ? {} : responseData.value, 'fun': fun }; var html = jsTemplate.template('form_data', data, '#form_data_container', function () { //判断有没有 checkbox radio var iCheck = false; projectCommon.iCheck(); var column = responseData.column; for (var obj in column) { value = column[obj]; if (value.input_type == 'color') { exports.color('#' + value.input_name); } else if (value.input_type == 'date') { projectCommon.datetime(value.input_name, 'date'); } else if (value.input_type == 'datetime') { projectCommon.datetime(value.input_name, 'datetime'); } else if (value.input_type == 'start2end_datetime') { projectCommon.datetime(value.input_name, 'date', true); } else if (value.input_type == 'simple_html_text') { exports.setEditor(value.input_name, 'simple'); } else if (value.input_type == 'html_text') { exports.setEditor(value.input_name, 'all'); } //将php 验证转换为js验证 var validatetype = value.validate_type; validatetype = validatetype.trim('\\|', ''); var _tempAutoCheckRules = {}; var _tempAutoCheckMessage = {}; if (validatetype != '') { if (validatetype.indexOf('|') >= 0) { var validatetypeAttr = validatetype.split('|'); var validatetypeAttrLength = validatetypeAttr.length; var validateMessageAttr = (value.validate_message).split('|'); for (var q = 0; q < validatetypeAttrLength; q++) { var _tempVal = validatetypeAttr[q]; _tempAutoCheckRules[php_js_validateRelation[_tempVal]] = true; _tempAutoCheckMessage[php_js_validateRelation[_tempVal]] = isUndefined(validateMessageAttr[q]) ? validateMessageAttr[0] : validateMessageAttr[q]; } autoCheckRules[value.input_name] = _tempAutoCheckRules; autoCheckMessage[value.input_name] = _tempAutoCheckMessage; } else { _tempAutoCheckRules[php_js_validateRelation[validatetype]] = true; _tempAutoCheckMessage[php_js_validateRelation[validatetype]] = value.validate_message; autoCheckRules[value.input_name] = _tempAutoCheckRules; autoCheckMessage[value.input_name] = _tempAutoCheckMessage; } } } });
提供一个遍历的文档
namesArry = [{ studentName: studentNames, nameLast: studentNames.substr(studentNames.length - 1, 1) }] var dom = $(template('selectedStudentsTemplate', { namesArry: namesArry })); modal.find("#selectedStudents").append(dom); <script id="selectedStudentsTemplate" type="text/html"> {{each namesArry as item}} <div class="cicle"> <span id="nameLast">{{item.nameLast}}</span> <span>{{item.studentName}}</span> </div> {{/each}} {{if namesArry.length > 14}} <div style="position: absolute;left: 933px;top: 25px;"> <span>……</span> </div> {{/if}} </script>