将ColdFusion cfparam数组复制到JavaScript数组中

时间:2016-02-05 22:15:13

标签: javascript jquery coldfusion tablesorter

我有一个CF页面的库存搜索表单frm_inv发布回自己。 frm_inv的主要记录tbl_inv使用tablesorter隐藏输入sort_list)与 cfparam 结合使用,以跟踪tbl_inv的{​​{1}}:

main.cfm

sortList

提交<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> 后,CF会使用frm_inv中的sort_list来恢复$(document).ready()的排序顺序:

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());
    });
});

但是我需要知道正确的javascript和coldfusion语法,以便专门为数组中的所有内容提供相关内容。

3 个答案:

答案 0 :(得分:4)

要从ColdFusion变量创建JavaScript变量,您可以使用 toScript() 函数。

var #toScript(ListToArray(form.sort_list), "sort_list")#;

这可用于各种变量类型,如字符串,数组,结构等。

答案 1 :(得分:4)

  

将ColdFusion ...数组复制到JavaScript数组

为什么呢?在大多数情况下,HTTP只传输字符串,因此客户端和服务器复杂类型之间没有转换。除非你做的不仅仅是来回传递排序值,否则在客户端和服务器端阵列之间进行转换只是一种不必要的复杂问题。将值保留为字符串并在客户端进行任何拆分或解析更简单。

你没有真正解释你想要解决的问题,但是......当前的方法没有任何本质上的错误。但是,它可以简化一点。 此处无需再次输出变量:

  

(A) var sort_list_str = <cfoutput>"#form.sort_list#"</cfoutput>;

由于您已将当前form.sort_list值存储在隐藏表单字段中,因此上述内容是多余的。相反,只需用javascript即

读取字段的值

(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));
    });
});

答案 2 :(得分:-1)

需要在cfparam中使用数组的特定语法:ColdFusion CFParam Can Use Struct And Array Notation

<cfparam name="form.sort_list" type="array" default="#ArrayNew( 2 )#">

相关问题