在使用 zTree 的时候,为了统一设置,就提取了一些公共的部分作为公共函数:类似这样:
zTreeInit:function(treeID,zOpts,data,callback) {
//zTree arguments obj default
var zTree_arg = {
setting : {
//其他设置,省略
async: {
//Set zTree asynchronous loading mode on/off.
enable: false,//closed
url: "http://host/getNode.ht",
autoParam: [],
contentType: "application/json",
dataFilter: null,//ajaxDataFilter, //function callback
dataType: "text",
otherParam: null,
type: "post"
}
}
} ;
zOpts = zOpts || {} ;
$.extend(true,{},zTree_arg,zOpts) ;
//init
this.rootObj = $.fn.zTree.init($("#"+treeID),zTree_arg.setting,data) ;
if(typeof callback === "function") {
callback.call(arguments);
}
}
这样,调用者传递异步加载请求参数的时候节点async
会变成这样:
async: {
enable: true,
url: url,
otherParam: {
cTenantId: v1,
userId: v2
}
}
这时候,服务器端方法接收上面两个参数方式如下:
public String fun(String cTenantId, String userId) {
// do sth
}
如此: 方法fun
不能接收到前端传递过来的这两个参数的值(值为 null),当我改变公共函数参数的拷贝方式如下:
$.extend(true,zTree_arg,zOpts) ;
或者
$.extend(false,{},zTree_arg,zOpts) ;
就可以正常接收了,我看了下 jQuery 的 extend 方法,没有看明白,看到一半就蒙了,请明白的 V 友给我讲解下,非常感谢! 我不想这么不明不白的解决问题。
非常感谢!
jQuery : v1.11.1 ; zTree: v3.5
1
haozhang 2016-08-24 15:27:13 +08:00
打开 chrome 的调试工具看看 ztree async 发送到服务器的 xhr 里面有没有那两个参数,应该是 get 请求的 xhr ,参数附在 URL 的 query string 上面,如果没有的话,你也可以选择不用 async 这个属性,你可以在 ztree 提供的钩子函数中使用$.ajax ,比如在渲染 ztree 的目录视图之前会执行的钩子函数之类的。
|
2
palmers OP @haozhang 谢谢~~ 你说的是回调函数吗? 你是指 setting.callback.beforeAsync 吗? http://www.treejs.cn/v3/api.php
|