jQuery MiniUI
标题:
表单数据组织方法form.getData对同名控件不能获取值
[打印本页]
作者:
veryfine
时间:
2013-3-13 17:34:29
标题:
表单数据组织方法form.getData对同名控件不能获取值
当我在编辑页面时,如果有两个同名的隐藏域控件,在执行form.getData方法后,不能获取同名控件的值,按理说应该是获取到一个数组对象值才对,请官方核实处理。
作者:
niko
时间:
2013-3-14 16:32:10
给你一个例子,能满足你的要求:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Form</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" /><link href="../demo.css" rel="stylesheet" type="text/css" />
<script src="../../scripts/boot.js" type="text/javascript"></script>
</head>
<body>
<h1>Form 表单</h1>
<div id="form1" >
<table>
<tr>
<td>
<label for="textbox1$text">UserName:</label>
</td>
<td>
<input name="username" class="mini-textbox" required="true" />
</td>
</tr>
<tr>
<td>
<label for="textbox1$text">XXX:</label>
</td>
<td>
<input name="xxx[0].a" class="mini-textbox" required="true" />
</td>
</tr>
<tr>
<td>
<label for="textbox1$text">XXX:</label>
</td>
<td>
<input name="xxx[1].a" class="mini-textbox" required="true" />
</td>
</tr>
<tr>
<td>
</td>
<td>
<input value="SetForm" type="button" onclick="setForm()" />
<input value="GetForm" type="button" onclick="getForm()" />
</td>
</tr>
</table>
</div>
<script type="text/javascript">
mini.parse();
function getForm() {
var form = new mini.Form("#form1");
var data = form.getData(true, true);
var s = mini.encode(data);
alert(s);
//form.setIsValid(false);
}
function setForm() {
var obj = {
username: "aaa",
xxx: [{ a: 1 }, { a: 2}]
};
var form = new mini.Form("#form1");
form.setData(obj, true, true);
}
</script>
</body>
</html>
复制代码
注意要下载最新版,刚更新的。
作者:
veryfine
时间:
2013-3-15 17:09:56
本帖最后由 veryfine 于 2013-3-19 11:48 编辑
niko 发表于 2013-3-14 16:32
给你一个例子,能满足你的要求:注意要下载最新版,刚更新的。
jquery里ajax有一个参数traditional,是可以有选择性地防止ajax调用$.param对传入的json数据进行深度序列化。
默认traditional=false,即要为迎合各种新的开发框架(如:struts2等)对于传递参数的要求作深度序列化,如传递的JSON参数为:data: {"xxx": [1, 2]},序列化后的参数为:xxx[]=1&xxx[]=2,若将traditional=true,同样的JSON参数序列化后的参数为:xxx=1&xxx=2,前者适用于目前各类开发框架下获取参数(你给出的例子也是为目前流程框架所准备的数据格式),而后者适用于用传统的开发方式获取参数(如:servlet的request.getParameterValues),而刚好目前我使用的是自己开发的一个基于servlet进行了轻度封装的开发框架(主要是觉得目前各种流行的开发框架越来越复杂,开发效率也得不到实质的提升,学习的成本也高,高级功能我们多半也用不上),而这样的情况下,对于如果要传递同名的控件参数,在程序后台直接将参数值获取成一个数组,就会有问题。目前我的方式是如下:
// 将附件列表附上
var attach_id = new Array();
$("#editform input[name=attach_id]").each(function(i) {
attach_id.push(this.value);
});
gridCharge.loading("保存中,请稍后......");
$.ajax({
url: "store_oa_cush_WholesalerChargeSave",
dataType: 'json',
cache: false,
type: 'POST',
data: {"data": mini.encode(data), "attach_id": attach_id},
traditional: true,
success: function (text) {
gridCharge.reload();
},
error: function (jqXHR, textStatus, errorThrown) {
alert(jqXHR.responseText);
}
});
综上所述,目前对于参数的处理方式没有什么大问题,我只是希望miniui能够兼容原始的参数传递方式,不要丢弃。既然jquery也保留了traditional这个开关,我们miniui是否也应该在form.getData()时考虑这样的问题。
欢迎光临 jQuery MiniUI (http://miniui.com/discuss/)
Powered by Discuz! X2