将 ColdFusion cfparam 数组复制到 JavaScript 数组中
Copying a ColdFusion cfparam array into a JavaScript array
我有一个 CF 页面,其库存搜索 表格 、frm_inv
post 返回到它自己。 frm_inv
的主要 table 记录,tbl_inv
,使用 tablesorter
。 隐藏输入 (sort_list
) 与 cfparam 结合使用以跟踪 tbl_inv
的 sortList
:
main.cfm
<cfparam name="form.sort_list" type="string" default="1,0">
<form id="frm_inv" action="main.cfm" method="post">
<input name="sort_list" type="hidden" value="#form.sort_list#"/>
<table id="tbl_inv" class="tablesorter">
...
</table>
</form>
提交frm_inv
时,CF使用$(document).ready()
中的sort_list
恢复tbl_inv
的排序:
$(document).ready(function(){
var sort_list_str = <cfoutput>"#form.sort_list#"</cfoutput>;
var sort_list = sort_list_str.split(",");
$("#tbl_inv").tablesorter({
textExtraction: ['complex'],
sortList:[[sort_list[0],sort_list[1]]]
}).bind("sortEnd", function(sorter) {
var sl = sorter.target.config.sortList;
$("input[name='sort_list']").val(sl.toString());
});
});
我宁愿使用数组也不愿像我现在所做的那样将逗号分隔的字符串转换为数组
<cfparam name="form.sort_list" type="string" default="1,0">
to
<cfparam name="form.sort_list" type="array" default="ArrayNew(2)">
但是我需要知道正确的 javascript 和 coldfusion 语法,以便在数组中专门设置所有相关的内容。
需要特定语法才能在 cfparam 中使用数组:ColdFusion CFParam Can Use Struct And Array Notation
<cfparam name="form.sort_list" type="array" default="#ArrayNew( 2 )#">
要从 ColdFusion 变量创建 JavaScript 变量,您可以使用 toScript()
函数。
var #toScript(ListToArray(form.sort_list), "sort_list")#;
这可用于广泛的变量类型,例如字符串、数组、结构等
Copying a ColdFusion ... array into a JavaScript array
为什么?大多数情况下,HTTP 仅传输字符串,因此客户端和服务器复杂类型之间没有转换。除非你做的不仅仅是来回传递排序值,否则客户端和服务器端数组之间的转换只是一个不必要的复杂化。将值保留为字符串并在客户端进行任何拆分或解析会更简单。
你并没有真正解释你试图解决什么问题,但是..当前的方法并没有本质上的错误。但是,它可以简化一点。 这里不需要再次cfoutput变量:
(A) var sort_list_str = <cfoutput>"#form.sort_list#"</cfoutput>;
由于您已经将当前 form.sort_list
值存储在隐藏的表单字段中,以上内容是多余的。相反,只需使用 javascript ie
读取字段的值
(B) var sort_list_str = $("input[name='sort_list']").val();
话虽如此,如果您真的更喜欢使用数组,则可以存储数组的 JSON 字符串表示形式。然后使用 parse() 和 stringify() 来回转换数组。与您当前方法的净效果相同,但代码更简单。
形式:
<cfparam name="form.sort_list" default="[[1,0]]">
...
<input id="sort_list" name="sort_list"
type="hidden" value="#encodeForHTML(form.sort_list)#" />
...
JQuery:
$(document).ready(function(){
$("#tbl_inv").tablesorter({
textExtraction: ['complex'],
sortList: JSON.parse($("#sort_list").val())
}).bind("sortEnd", function(sorter) {
var sort_arr = sorter.target.config.sortList;
$("#sort_list").val(JSON.stringify(sort_arr));
});
});
我有一个 CF 页面,其库存搜索 表格 、frm_inv
post 返回到它自己。 frm_inv
的主要 table 记录,tbl_inv
,使用 tablesorter
。 隐藏输入 (sort_list
) 与 cfparam 结合使用以跟踪 tbl_inv
的 sortList
:
main.cfm
<cfparam name="form.sort_list" type="string" default="1,0">
<form id="frm_inv" action="main.cfm" method="post">
<input name="sort_list" type="hidden" value="#form.sort_list#"/>
<table id="tbl_inv" class="tablesorter">
...
</table>
</form>
提交frm_inv
时,CF使用$(document).ready()
中的sort_list
恢复tbl_inv
的排序:
$(document).ready(function(){
var sort_list_str = <cfoutput>"#form.sort_list#"</cfoutput>;
var sort_list = sort_list_str.split(",");
$("#tbl_inv").tablesorter({
textExtraction: ['complex'],
sortList:[[sort_list[0],sort_list[1]]]
}).bind("sortEnd", function(sorter) {
var sl = sorter.target.config.sortList;
$("input[name='sort_list']").val(sl.toString());
});
});
我宁愿使用数组也不愿像我现在所做的那样将逗号分隔的字符串转换为数组
<cfparam name="form.sort_list" type="string" default="1,0">
to
<cfparam name="form.sort_list" type="array" default="ArrayNew(2)">
但是我需要知道正确的 javascript 和 coldfusion 语法,以便在数组中专门设置所有相关的内容。
需要特定语法才能在 cfparam 中使用数组:ColdFusion CFParam Can Use Struct And Array Notation
<cfparam name="form.sort_list" type="array" default="#ArrayNew( 2 )#">
要从 ColdFusion 变量创建 JavaScript 变量,您可以使用 toScript()
函数。
var #toScript(ListToArray(form.sort_list), "sort_list")#;
这可用于广泛的变量类型,例如字符串、数组、结构等
Copying a ColdFusion ... array into a JavaScript array
为什么?大多数情况下,HTTP 仅传输字符串,因此客户端和服务器复杂类型之间没有转换。除非你做的不仅仅是来回传递排序值,否则客户端和服务器端数组之间的转换只是一个不必要的复杂化。将值保留为字符串并在客户端进行任何拆分或解析会更简单。
你并没有真正解释你试图解决什么问题,但是..当前的方法并没有本质上的错误。但是,它可以简化一点。 这里不需要再次cfoutput变量:
(A)
var sort_list_str = <cfoutput>"#form.sort_list#"</cfoutput>;
由于您已经将当前 form.sort_list
值存储在隐藏的表单字段中,以上内容是多余的。相反,只需使用 javascript ie
(B) var sort_list_str = $("input[name='sort_list']").val();
话虽如此,如果您真的更喜欢使用数组,则可以存储数组的 JSON 字符串表示形式。然后使用 parse() 和 stringify() 来回转换数组。与您当前方法的净效果相同,但代码更简单。
形式:
<cfparam name="form.sort_list" default="[[1,0]]">
...
<input id="sort_list" name="sort_list"
type="hidden" value="#encodeForHTML(form.sort_list)#" />
...
JQuery:
$(document).ready(function(){
$("#tbl_inv").tablesorter({
textExtraction: ['complex'],
sortList: JSON.parse($("#sort_list").val())
}).bind("sortEnd", function(sorter) {
var sort_arr = sorter.target.config.sortList;
$("#sort_list").val(JSON.stringify(sort_arr));
});
});