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

标签 javascript jquery coldfusion tablesorter

我有一个 CF 页面,它是库存搜索表单frm_inv post 返回到自身。 frm_inv 的主要 记录,tbl_inv,使用tablesorter隐藏输入 (sort_list) 与cfparam 结合使用以跟踪tbl_inv >排序列表:

主.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 语法,以便在数组中专门设置所有相关内容。

最佳答案

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

关于javascript - 将 ColdFusion cfparam 数组复制到 JavaScript 数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35234483/

相关文章:

javascript - 使用 supertest 和 Express JS 测试 next(err)

javascript - 提交表单时不显示错误类

javascript - 将参数传递给 JQuery 函数

coldfusion - 添加文字水印

javascript - 根据先前选择的下拉列表删除选择下拉选项

javascript - 如何在 AngularJS 中的 Angular 数据表(l-lin)上应用 DOM 外部的button().trigger()

javascript - 滚动事件上的jquery动画

javascript - Django View 中的通用身份验证

jquery - Kenburner slider 在 IE 中不工作

jquery - 使用 Coldfusion 捕获动态表单字段