ColdFusion.Window.create没有刷新弹出窗口

时间:2015-03-27 12:35:40

标签: javascript jquery coldfusion

我打开一个窗口,通过Coldfusion.Window.Create编辑项目。当我点击不同的“编辑”链接时,窗口总是显示我编辑的第一个项目,而不是我点击的那个项目。由于某种原因,弹出窗口在每次调用时都没有刷新。

以下是我的cfm的代码:

<cfoutput query="getSavedSelections">
<table class="mytableb" >
    <tr>
        <td class="mylistb" style="width:178px;" valign="top">
            #getSavedSelections.SavedSelectionExportName#
        </td>
        <td class="mylistb" style="width:130px;" valign="top">
            (<a onclick="EditSurveyExport(#getSavedSelections.SavedSelectionExportId#,'#scope#')" style="cursor: pointer;cursor:hand;">Edit</a> |  <a onclick="ConfirmExportDeletion('#scope#',#pgmid#,#getSavedSelections.SavedSelectionExportId#,'#surveyAliasname#','#getSavedSelections.SavedSelectionExportName#','csv');" style="cursor: pointer;cursor:hand;">Delete</a>)                            
        </td>
    </tr>
</table>
</cfoutput>

以下是打开和关闭窗口的javascript代码:

function EditSurveyExport(SavedSelectionID,passedScope)
{
    console.log(SavedSelectionID);
    ColdFusion.Window.create("SavedSelectionEditingWindow","Edit Saved selection","index.cfm?event=survey.editexportwithid&SavedSelectionID="+SavedSelectionID+"&passedscope="+passedScope,{modal:true,width:500,height:700,center:true,draggable:true})
    console.log('after create');
    document.getElementById(ColdFusion.Window.getWindowObject("SavedSelectionEditingWindow").header.id).className = "windowHdr";

}

function CloseExportEditingWindow()
{
    ColdFusion.Window.hide('SavedSelectionEditingWindow');
    console.log('after closing');
}

我观察了控制台。只有在第一次加载页面后,才会调用此网址:“http://localhost/index.cfm?event=survey.editexportwithid&SavedSelectionID=1029&passedscope=individual&_cf_containerId=SavedSelectionEditingWindow-body&_cf_nodebug=true&_cf_nocache=true&_cf_clientid=8BF05647C531DF1C34380F471DE37721&_cf_rc=0”。

然后我只能在控制台中看到id和'after create'。

我无法理解这背后的原因。谁能帮助我理解为什么会这样?

2 个答案:

答案 0 :(得分:2)

我同意Scott的评论,你应该尝试使用较新的JavaScript库而不是依赖ColdFusion来为你做这件事。你最终会遇到这些限制。

话虽如此,我认为问题在于您打开的每个窗口都必须具有唯一的名称。否则代码将只打开现有窗口。

关于name参数,来自the docs

  

窗口的名称。此属性需要与窗口交互,包括动态显示或隐藏它。如果存在具有指定名称的窗口,则该函数显示该窗口,并忽略其余参数;否则,该名称在页面上必须是唯一的。

代码中创建的所有窗口都具有相同的名称; “SavedSelectionEditingWindow”。您需要为要打开的每个不同窗口创建唯一的名称。您可以将SavedSelectionID参数附加到名称(假设每个项目是唯一的)。

答案 1 :(得分:2)

首先,我将重申Scott和Miguel所说的话。如果您不需要,请不要使用它。话虽这么说,为了回答你的问题,你需要在重新创建之前销毁窗口,以便让cfwindow代码重新加载内容。这是我过去常常使用的功能:

var windowCleanup = function(id) {
    try {
        //Destroy the window if it still exists
        ColdFusion.Window.destroy(id, true);
    } catch(e) { }
}

这将完全破坏前一个窗口,然后创建新窗口。然后,每当您创建一个新窗口时,请在create()语句之后运行:

ColdFusion.Window.onHide(id, windowCleanup);

现在,无论出于何种原因,只要该窗口被隐藏,它就会被正确销毁,您将为新的create()方法调用做好准备。