我有一个ColdFusion页面,其中包含使用DataTables构建的表单。
此页面管理一些事物(文档,类别,文档类型等),每个选项卡都有CRUD功能。
最初,在每个选项卡上,它只显示当前的一组(填空),但如果单击创建/更新链接/图标,则会弹出表单。一些表单字段实际上是其他表的字段。例如,如果我想上传新文档,则其中一个表单字段是该文档的类别。
我通过使用cfinvoke到cfc中的get函数来获取该表单字段的信息,该函数作为查询返回并且我遍历,填充下拉列表。
我的问题是:如果我在类别选项卡上创建新类别,我需要在新文档表单上更新类别选项。但是,它已经填充,并且在刷新页面之前不会重新检查该信息,因此不会在下拉列表中显示我的新类别。
我看到它的方式,我需要重新调用CFC方法,重新填充查询变量,然后刷新表单以使其循环遍历新数据并完全填充下拉列表。
我试图调用cfinvoke并从DTHelper()的回调部分重置表单但是(按预期的那种)不起作用。
如果使用AJAX进行所有操作并且实际页面永远不会重新加载,我将如何强制刷新数据?或者我应该在这种情况下强制重新加载页面? (哪个有效,我试过了,但这是一个页面刷新)
答案 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表。您可以根据自己的需要进行调整。