一个页面有多个datagrid如何封装复用?

本文介绍在一个页面上如何复用多个DataGrid组件,并通过Vue.js实现数据状态控制及按钮禁用逻辑。具体包括DataGrid封装、结合单选按钮实现添加删除按钮的状态切换,以及在Vue生命周期中更新DOM。

一个页面有多个DataGrid如何复用?

介绍指南

  • 封装DataGrid
  • 使用radio禁用启用
  • 页面其他地方使用vue v-model数据绑定( 获取单选按钮时,在updated钩子遍历)生命周期执行关系
  • html代码

项目需求:

  • 1.没有数据,默认.单选框状态选 “无” 并且 禁用DataGrid中(添加、删除)按钮
  • 2.有数据时,单选框状态选中 " 有" 且 DataGrid中(添加、删除)为启用
  • 3.点击 “无” 状态时,禁用 + - 按钮,否则启用

效果图1:没有数据

这里写图片描述

效果图2: 有数据

这里写图片描述

1. 封装DataGrid

/**********************DataGrid封装   start************************/
var editIndex = undefined;

// 编辑方法
function endEditing($el) {

	if (editIndex == undefined) {
		return true
	}

	if ($el.datagrid('validateRow', editIndex)) {
		$el.datagrid('endEdit', editIndex);
		editIndex = undefined;
		return true;
	} else {
		return false;
	}
}



// 点击选中行
function onClickRow(index) {
	if (editIndex != index) {
		if (endEditing($(this))) {
			$(this).datagrid('selectRow', index)
				.datagrid('beginEdit', index);
			editIndex = index;
		} else {
			$(this).datagrid('selectRow', editIndex);
		}
	}
}


// 添加方法
function append(el) {
	// 获取当前操作DateGrid的id
	var $idEl = $(el).parents(".datagrid-wrap").find(".easyui-datagrid")

	if (endEditing($idEl)) {
		$idEl.datagrid('appendRow', {
		// 这里是我页面字段名称(可忽略)
			disease_name: "感冒", // 给定默认值
			disease_remark: "",
			diagnosis_date: "",
			create_time: ""

		});
		editIndex = $idEl.datagrid('getRows').length - 1;
		$idEl.datagrid('selectRow', editIndex)
			.datagrid('beginEdit', editIndex);
	}
}



// 删除方法
function removeit(el) {
	var $idEl = $(el).parents(".datagrid-wrap").find(".easyui-datagrid")
	if (editIndex == undefined) {
		return
	}
	$idEl.datagrid('cancelEdit', editIndex)
		.datagrid('deleteRow', editIndex);
	editIndex = undefined;
}

2. 结合radio禁用启用 DataGrid 删除&添加按钮

	/**************禁用 启用(在vue 钩子中遍历 获取 无的 单选框)**************/
	$(function () {
		//    获取所有  无 的单选框
		var $radios = $('.radioSpan');
		var $btns = $('.addAndRemoveBtn');


		//页面加载 遍历所有 "无的" 单选框
		$radios.each(function () {
			if ($(this).prop("checked")) {
				var index = $(this).parents('.table-box').index();
				// 当点击  “无”  DataGrid 下的 + - 按钮 禁用
				$btns.eq(index).children('.adds,.dels').linkbutton('disable');

			}
		})

		// 给 无 注册单击事件
		$radios.on('click', function () {
			// 获取li的 index下标
			var index = $(this).parents('.table-box').index();
			// 当点击  “无”  DataGrid 下的 + - 按钮 禁用
	$btns.eq(index).children('.adds,.dels').linkbutton('disable');

		});
		// 遍历所有  “有的”  单选框
		var $has = $('.has');
		$has.on('click', function () {
			// 获取 当前 li标签
			var index = $(this).parents(".table-box").index();
			// 当点击  “有”  DataGrid 下的 + - 按钮 启用
			$btns.eq(index).children('.adds,.dels').linkbutton('enable');
		})
	})

3. vue 遍历 "无"数据 状态 控制 DataGrid + - 按钮

var app = new Vue({
el: '#app',
data: data,

/*************vue  updated生命周期钩子  中  获取所有  无 的单选框******************/
updated: function () {
	//    获取所有  无 的单选框
	var $radios = $('.radioSpan');
	var $btns = $('.addAndRemoveBtn');

	// 遍历所有 "无的" 单选框
	$radios.each(function () {
		// 判断 选中的 按钮
		if ($(this).prop("checked")) {
			// 获取li的 index下标
			var index = $(this).parents('.table-box').index();
			console.log(index);
			// 当点击  “无”  DataGrid 下的 + - 按钮 禁用
			$btns.eq(index).children('.adds,.dels').linkbutton('disable');
		} else {
			var index = $(this).parents('.table-box').index();
			console.log(index);
			// 当点击  “有”  DataGrid 下的 + - 按钮 启用
			$btns.eq(index).children('.adds,.dels').linkbutton('enable');
		}
	})
}

4. html

<!-- 疾病 -->
<div class="one table-box">
	<ul class="radioChoose">
		<li>
			<span class="input-radio">
				<input type="radio" class="radioSpan" value="1" name="groupdisease" v-model="is_disease">
				<span></span>
			</span>
			<span class="input-radio">
						<input type="radio" class="has" value="2" name="groupdisease" v-model="is_disease">
						<span>有疾病</span>
			</span>
		</li>
	</ul>
	<table id="oneDG" class="easyui-datagrid" style="width:98%;height:auto" data-options="
						iconCls: 'icon-edit',
						singleSelect: true,
						toolbar: '#oneRow',
			  
						onClickRow: onClickRow
					">
		<thead>
			<tr>
				<th data-options="field:'disease_name',width:350,align:'center',editor:'textbox'">疾病名称</th>
				<th data-options="field:'disease_remark',width:250,align:'center',editor:'textbox'">备注</th>
				<th data-options="field:'diagnosis_date',width:142,align:'center',editor:{
						type:'datebox',
						options:{
							required:true,
							editable:false
						}

					}">确诊日期</th>
			</tr>
		</thead>
	</table>

	// 添加,删除调用方法  把 当前 this 进行传参
	<div id="oneRow" style="height:auto" class="addAndRemoveBtn">
		<a href="javascript:void(0)" class="easyui-linkbutton adds" data-options="iconCls:'icon-add',plain:true" onclick="append(this)">添加</a>
		<a href="javascript:void(0)" class="easyui-linkbutton dels" data-options="iconCls:'icon-remove',plain:true" onclick="removeit(this)">删除</a>
	</div>
</div>
名称 类型 描述 默认值 columns(列) array(数组) 数据表格列配置对象,查看列属性以获取更多细节。 null frozenColumns(固定列) array(数组) 跟列属性一样,但是这些列固定在左边,不会滚动。 null fitColumns(自适应列宽) boolean(布尔型) 设置为true将自动使列适应表格宽度以防止出现水平滚动。 false striped(显示条纹) boolean(布尔型) 设置为true将交替显示行背景。 false method(方法) string(字符串) 请求远程数据的方法类型。 post nowrap(截取) boolean(布尔型) 设置为true,当数据长度超出列宽时将会自动截取。 true idField(id字段) string(字符串) 表明该列是一个唯一列。 null url(超链接) string(字符串) 一个用以从远程站点请求数据的超链接地址。 null loadMsg(载入时信息) string(字符串) 当从远程站点载入数据时,显示的一条快捷信息。 Processing, please wait … pagination(分页) boolean(布尔型) 设置true将在数据表格底部显示分页工具栏。 false rownumbers(行数) boolean(布尔型) 设置为true将显示行数。 false singleSelect(单选模式) boolean(布尔型) 设置为true将只允许选择一行。 false pageNumber(当前页码) number(数字) 当设置分页属性时,初始化分页码。 1 pageSize(每页记录数) number(数字) 当设置分页属性时,初始化每页记录数。 10 pageList(可选择的每页记录数) array 当设置分页属性时,初始化每页记录数列表。 [10,20,30,40,50] queryParams(查询参数) object(对象) 当请求远程数据时,发送的额外参数。 {} sortName(默认排序) string(字符串) 当数据表格初始化时以哪一列来排序。 null sortOrder(排序顺序) string(字符串) 定义排序顺序,可以是'asc'或者'desc'(正序或者倒序)。 asc remoteSort(远程排序) boolean(布尔型) 定义是否通过远程服务器对数据排序。 true showFooter(显示行底) boolean(布尔型) 定义是否显示行底(如果是做统计表格,这里可以显示总计等)。 false rowStyler(行样式) function(函数) 返回样式,如:'background:red',function有2个参数: index:行索引,从0开始. row:对应于该行记录的对象。 loadFilter(载入过滤器) function(函数) 返回用以显示的已过滤数据,function有一个参数'data'表示原始数据,你可以将原始数据改变为规范的数据格式,该函数必须返回包含 'total'和'rows'属性的标准数据对象。 editors(编辑模式) object(对象) 定义当编辑一行时的编辑模式。 predefined editors view(视图) object(对象) 定义数据表格的视图。 default view
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值