动态的生成表单并且添加校验的插件,是利用handhandlebars去实现的在项目当中使用希望对大家有用

1,首先的引入一下样式咱们最熟悉的css完全是为了好看

<link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
        <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
        

2,是所依赖的一下js文件


		<script type="text/javascript" src="lib/jquery.js"></script>//比较喽还在使用jquery
        <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>		
        <script type="text/javascript" src="lib/handlebars.js"></script>
		<script type="text/javascript" src="lib/Handlebars_helper.js"></script>//handlebars方法的处理
		<script type="text/javascript" src="js/formPlugin.js"></script>//分装的插件
		<script type="text/javascript" src="js/formejson.js"></script>//这个就是具体的js使用

3,贴出具体的js文件当然出了公用的网上可以找到的那就不用了吧!

@1.html 

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
        <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
        <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
        
		<title></title>
	</head>
	<body>
		
		<script type="text/template" id="temple">
			<div>
				{{#each formOptions}}
				{{#if_eq type 'text'}}
			<ul>
				<li>{{json}}</li>
				<li>{{this}}</li>
				<li>{{this}}</li>
			</ul>
			{{else if_eq type 'select'}}
			<ul>
				<li>{{this}}</li>
				<li>{{this}}</li>
				<li>{{this}}</li>
				<li>{{this}}</li>
			</ul>
			{{/if_eq}}
			{{/each}}
		</div>
		</script>
		
		<div id="htmlTemple"></div>
		
		
		
		
		
		<!--<script type="text/javascript" src="lib/json.js"></script>-->
		<script type="text/javascript" src="lib/jquery.js"></script>
        <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>		
        <script type="text/javascript" src="lib/handlebars.js"></script>
		<script type="text/javascript" src="lib/Handlebars_helper.js"></script>
		<script type="text/javascript" src="js/formPlugin.js"></script>
		<script type="text/javascript" src="js/formejson.js"></script>

	</body>
</html>

@2.插件formPlugin.js

(function($){
	$.fn.formPlugin = function(options){	
		
		var defaultDatas = {
			temp:'<form id="form{{formId}}" name="form{{formId}}" method="post">'+
							'{{#each formOptions}}'+
								'{{#if_eq type "text"}}'+
								'<div class="col-sm-6">'+
									'<div class="form-group">'+
										'<label>{{label}}</label>'+
										'<input name="{{name}}" id="{{name}}" maxlength="{{maxlength}}" type="{{type}}" class="form-control input-sm" placeholder="{{placeholder}}" maxlength="[{{maxlength}}]" onkeyup="value=value.replace(/[^\w\.\/]/ig)">'+
										'<span id="addPayBank_channelbankCode_err" style="color:red;"></span>'+
									'</div>'+
								'</div>'+
								'{{else if_eq type "select"}}'+
								'<div class="col-sm-6">'+
									'<div class="form-group">'+
										'<label>{{label}}</label>'+
										'<select name="{{name}}" class="form-control" data-enum-fetch="{{enum}}" style="width:100%;">'+
											'{{#each items}}'+
											'<option value="{{value}}">{{text}}</option>'+
											'{{/each}}'+
										'</select>'+
									'</div>'+
								'</div>'+
								'{{else if_eq type "date"}}'+
								'<div class="col-sm-6">'+
									'<div class="form-group">'+
										'<label>{{label}}</label>'+
										'<input name="{{name}}" id="{{name}}" type="{{type}}" class="form-control datepicker" placeholder="{{placeholder}}" maxlength="{{maxlegth}}" data-date-format="{{format}}" >'+
										'<span id="addPayBank_channelbankCode_err" style="color:red;"></span>'+
									'</div>'+
								'</div>'+
								'{{else if_eq type "textarea"}}'+
								'<div class="col-sm-6">'+
									'<div class="form-group">'+
										'<label>{{label}}</label>'+
										'<input name="{{name}}" rows="10" cols="30" id="{{name}}" type="{{type}}" class="form-control " placeholder="{{placeholder}}" maxlength="{{maxlegth}}" >'+
										'<span id="addPayBank_channelbankCode_err" style="color:red;"></span>'+
									'</div>'+
								'</div>'+
								'{{/if_eq}}'+
							'{{/each}}'+
						'</form>',
				context:options.context		
		}
		if(!options) return
		if(options.temp){
			//var options = $.extend(defaultDatas,options.temp);
			defaultDatas.temp = options.temp
		}else{
			options = defaultDatas
		}
		
		if(options.context){
			var templeate = Handlebars.compile(options.temp)
			var htmltlp = templeate(options.context)
			console.log(templeate)
		    $(this).html(htmltlp)
		}
		
		
	}
}(jQuery))

@3.动态获取的数据formejson.js

var formeDataTpl = {
			"tableId": "xxxTable",
			"formId": "testForm",
			"modalId":"formEdit",
			"modalName":"模态框名称",
			"rowNum":'4',
			"headers": [
				"字段1",
				"字段2",
				"字段3",
				"字段4",
				"字段5",
				"字段6",
				"字段7",
				"操作"
			],
			api: "gh.api.gateway.apimanager.api.list",
			"pageOptions": [{
				"rowNum":'4'
			},
			{
					"name": "number",
					"default": 1
				},
				{
					"name": "size",
					"default": 10
				}
			],
			"formOptions": [{
					"type": "text",
					"label": "代理路径",
					"name": "path",
					"maxlength": 10,
					"placeholder": "请输入代理路径"
				},
				{
					"type": "text",
					"label": "实际路径",
					"name": "url",
					"maxlength": 10,
					"placeholder": "请输入实际路径"
				},
				{
					"type": "select",
					"label": "下来选项",
					"name": "name",
					"enum": "PRODUCTSTATUS",
					"items": [
					{
						"text": "全部",
						"value": ""
					},
					{
						"text": "测试onedata",
						"value": "onedata"
					},
					{
						"text": "测试twodata",
						"value": "onedata"
					},
					{
						"text": "测试threedata",
						"value": "onedata"
					},
					{
						"text": "测试fourdata",
						"value": "onedata"
					},
					]
				},
				{
					"type": "date",
					"label": "起始日期",
					"name": "startDate",
					"format": "YYYY-MM-DD",
					"placeholder": "从",
					"data-date-begin": "begin"
				}, {
					"type": "date",
					"label": "enddate",
					"name": "endDate",
					"format": "YYYY-MM-DD",
					"placeholder": "从",
					"data-date-end": "end"
				},{
					"type": "textarea",
					"label": "文本框输入",
					"name": "textAdd",
					"format": "YYYY-MM-DD",
					"placeholder": "文本框输入",
					"data-date-end": "end"
				}
			],
			"columns": [{
				"field": "apiName"
			}, {
				"field": "path",
				"formatter": ""
			}, {
				"field": "serviceId",
				"formatter": "index + 1"
			}, {
				"field": "stripPrefix",
				"enum": "INSTITUTIONTYPE"
			}, {
				"field": "url"
			}, {
				"field": "retryable"
			}, {
				"field": "enabled"
			}, {
				"align": "center",
				"buttons": [{
					"text": "bbbb1",
					"type": "button",
					"class": "ddd123"
				}, {
					"text": "bbbb2",
					"type": "button",
					"class": "aaa123"
				}],
				"events": [{
					"type": "click",
					"class": "ddd123",
					"action": "form:xxxModal:xxxFormId"
				}, {
					"type": "click",
					"class": "aaa123"
				}]
			}]
		}

@4.调用的方法bar.js

var htmlTemple = $('#temple').html();
var template = Handlebars.compile(htmlTemple);
var htmlpl = template(formeDataTpl);
$('#textHtml').html(htmlpl)

猜你喜欢

转载自blog.csdn.net/wangyun_gogo/article/details/81671386