数据更改后刷新动态表单字段

时间:2017-03-23 16:54:13

标签: forms coldfusion datatables

我有一个ColdFusion页面,其中包含使用DataTables构建的表单。

此页面管理一些事物(文档,类别,文档类型等),每个选项卡都有CRUD功能。

最初,在每个选项卡上,它只显示当前的一组(填空),但如果单击创建/更新链接/图标,则会弹出表单。一些表单字段实际上是其他表的字段。例如,如果我想上传新文档,则其中一个表单字段是该文档的类别。

我通过使用cfinvoke到cfc中的get函数来获取该表单字段的信息,该函数作为查询返回并且我遍历,填充下拉列表。

我的问题是:如果我在类别选项卡上创建新类别,我需要在新文档表单上更新类别选项。但是,它已经填充,并且在刷新页面之前不会重新检查该信息,因此不会在下拉列表中显示我的新类别。

我看到它的方式,我需要重新调用CFC方法,重新填充查询变量,然后刷新表单以使其循环遍历新数据并完全填充下拉列表。

我试图调用cfinvoke并从DTHelper()的回调部分重置表单但是(按预期的那种)不起作用。

如果使用AJAX进行所有操作并且实际页面永远不会重新加载,我将如何强制刷新数据?或者我应该在这种情况下强制重新加载页面? (哪个有效,我试过了,但这是一个页面刷新)

2 个答案:

答案 0 :(得分:2)

所以,我的老板弄清楚了。您必须使用drawCallback()

在我的例子中它的工作方式如此。首先,给所有主要类别选择框一个类:

<select name="majorCategoryID" class="major-category-select">
...
</select>

然后修改主要类别的DataTable选项:

majorcat_dt = $("#majorcat-dt").DataTable({
    ajax: "blah"
    columns: [{ blah }],
    drawCallback: function() {
        /* remove all options from select boxes */
        $(".major-category-select option").remove();

        /* this is the crazy DataTables api call to get rows */
        this.api().rows().data().each(function(row) {
            $(".major-category-select").append("<option value='"+row.id+"'>"+row.name+"</option>");
        });         
    }
});

这也首先取消了对cfinvoke的需求,因为这也会填充页面加载的下拉列表。

答案 1 :(得分:1)

以下是我曾经做过的事情。

的javascript:

var minutes = 10;
var refreshInterval = minutes * 60 * 1000;  // to get milliseconds

jQuery.fn.populateCensusDiv = function() {
$.ajax({
      type:"POST",
      url:"censusData.cfc?method=getCensusData",
      cache:false,
      success: function(msg) {
      $("#census").html(msg);
      }
  });

setTimeout(function() {
$("#census").populateCensusDiv();

}, refreshInterval);

return this;

ColdFusion功能

<cffunction name="getCensusData" access="remote" returntype="string" 
//deleted code
returnFormat = "plain">
<cfscript>
var returnString = "";
</cfscript>

more code
<cfsavecontent variable="returnString">
more code
</cfsavecontent>

<cfreturn returnString>
</cffunction>

我的上下文是一个每10分钟刷新一次的html表。您可以根据自己的需要进行调整。