1

我正在使用 javascript 来控制 ColdFusion 中 cfwindow 对象的创建。

cfwindow 附加到允许用户选择一个或多个记录并将它们分配或取消分配给单个记录的表单。

cfwindow 中的大多数表单为用户提供了输入表单元素然后提交的能力,然后窗口被销毁并刷新父窗口以显示结果。在我的情况下,用户可能会在完成之前在窗口对象中执行多个提交。

流程是这样的:

  1. 用户打开记​​录。
  2. 用户单击绑定到创建 cfwindow 对象的按钮。
  3. 用户将记录分配或取消分配给父记录。
  4. cfwindow 对象在每次提交分配时刷新。
  5. 用户使用关闭按钮关闭(销毁)窗口对象。
  6. 父窗口刷新。

现在,我拥有一切,但#4 工作。窗口确实刷新;但是,它不显示更改(已分配或​​未分配)记录。我确认数据层正常工作并对表格进行了更改;但是,它不会显示给用户。

所以,我需要一些有关表单的 onSuccess 控件的帮助。顺便说一句,我正在使用 cfform。

这是我的代码示例。如果您查看 addedit.cfm 的底部,您将看到 cfmodule 的代码。此页面与 cfassign.cfm 相同。唯一的区别是我创建了一个新表单,因为 cfwindow 不允许在父子之间使用相同的表单,而 cfmodule 允许。

添加了it.cfm

 <!------------------------------------------------------------------

属性 - - - - - - - - - - - - - - - - - - - - - - - - - ------------------>

• 类别 。. . 从列表中选择。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . • 频率 。. . 从列表中选择。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . • 地位 。. . 从列表中选择。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . • 训练方法。. . 从列表中选择。. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 持续时间 课程费用 • 初始要求 是 否 • 需要启动 是 否 评论(200 个字符限制) function cleanup() { //当 onHide 时,销毁 cfwindow ColdFusion.Window.destroy('prerequisite',true); //重新加载父页面以显示更改 window.location.reload(); } function showWin(id) { //我们有吗?试试 {ColdFusion.Window.destroy('prerequisite',true); } catch(e) { } ColdFusion.Window.create('prerequisite','Assign Prerequisites for #qryCourses.Course_Title#','cfassign.cfm?id='+id,{height:400,width:1150,模态:假,刷新显示:真});//获取窗口对象时赋值变量 ob=ColdFusion.Window.getWindowObject('prerequisite_body'); //强制窗口居中的命令 ob.center(); //关闭时清理窗口 ColdFusion.Window.onHide('prerequisite',cleanup); } cfassign.cfm ---> 销毁(“先决条件”,真);} catch(e) { } ColdFusion.Window.create('prerequisite','Assign Prerequisites for #qryCourses.Course_Title#','cfassign.cfm?id='+id,{height:400,width:1150,模态:假,刷新显示:真});//获取窗口对象时赋值变量 ob=ColdFusion.Window.getWindowObject('prerequisite_body'); //强制窗口居中的命令 ob.center(); //关闭时清理窗口 ColdFusion.Window.onHide('prerequisite',cleanup); } cfassign.cfm ---> 销毁(“先决条件”,真);} catch(e) { } ColdFusion.Window.create('prerequisite','Assign Prerequisites for #qryCourses.Course_Title#','cfassign.cfm?id='+id,{height:400,width:1150,模态:假,刷新显示:真});//获取窗口对象时赋值变量 ob=ColdFusion.Window.getWindowObject('prerequisite_body'); //强制窗口居中的命令 ob.center(); //关闭时清理窗口 ColdFusion.Window.onHide('prerequisite',cleanup); } cfassign.cfm ---> '为#qryCourses.Course_Title#分配先决条件','cfassign.cfm?id='+id,{height:400,width:1150,modal:false,refreshOnShow:true}); //获取窗口对象时赋值变量 ob=ColdFusion.Window.getWindowObject('prerequisite_body'); //强制窗口居中的命令 ob.center(); //关闭时清理窗口 ColdFusion.Window.onHide('prerequisite',cleanup); } cfassign.cfm ---> '为#qryCourses.Course_Title#分配先决条件','cfassign.cfm?id='+id,{height:400,width:1150,modal:false,refreshOnShow:true}); //获取窗口对象时赋值变量 ob=ColdFusion.Window.getWindowObject('prerequisite_body'); //强制窗口居中的命令 ob.center(); //关闭时清理窗口 ColdFusion.Window.onHide('prerequisite',cleanup); } cfassign.cfm ---> getWindowObject('prerequisite_body'); //强制窗口居中的命令 ob.center(); //关闭时清理窗口 ColdFusion.Window.onHide('prerequisite',cleanup); } cfassign.cfm ---> getWindowObject('prerequisite_body'); //强制窗口居中的命令 ob.center(); //关闭时清理窗口 ColdFusion.Window.onHide('prerequisite',cleanup); } cfassign.cfm --->
<cfif StructKeyExists(form, "btnUnassignCourses") and StructKeyExists(form, "AssignedCourses") and len( form.AssignedCourses ) gt 0>
    <!--- Remove courses as pre-requisites from the parent course. --->
        <cfquery name="RemoveCoursePrerequisite" datasource="#Request.App.DSN#" >

        </cfquery>

<cfelseif StructKeyExists(form, "btnAssignCourses") and StructKeyExists(form, "UnassignedCourses") and len( form.UnassignedCourses ) gt 0>
    <!--- Add course as pre-requisites for the parent course. --->
        <cfquery name="AddCoursePrerequisite" datasource="#Request.App.DSN#" >

        </cfquery>
</cfif>

         <table>
             <tr>
                 <div class="ModuleFullName">
             <td>
                <div class="fieldWrapperControl">
                    <label>Assigned Courses (#qryAssignedCourses.Recordcount#)</label>
                    <cfselect
                        name="AssignedCourses"
                        style="font-size:.8125em; height:200px; width:500px;"
                        query="qryAssignedCourses"
                        display="Course_Description"
                        value="ID"
                        queryposition="below"
                        editable="no"
                        multiple="true">
                    </cfselect> 
                </div>

            </td>
            <div class="fieldWrapperButton">
            <td style="vertical-align:middle;">

                <cfinput type="submit" name="btnAssignCourses" value="<<" style="display:block;" />
                <cfinput type="submit" name="btnUnassignCourses" value=">>" style="display:block;" />
            </td>

            </div>
            <td>
                <div class="fieldWrapperControl">
                    <label>Unassigned Courses (#qryUnassignedCourses.Recordcount#)</label>
                    <cfselect
                        name="UnassignedCourses"
                        style="font-size:.8125em; height:200px; width:500px;"
                        query="qryUnassignedCourses"
                        display="Course_Description"
                        value="Unassigned_ID"
                        queryposition="below"
                        editable="no"
                        multiple="true">
                    </cfselect> 
                </div>
            </td>
            </tr>
            <tr>
                <td colspan="3" style="font-size:.9em;"><label>** Press and hold down the Ctrl OR Shift key to select multiple courses.</label></td>
            </tr>
            </table>

4

2 回答 2

1

我 blv 你应该在你的 cfwindow 中添加属性 refreshonShow="true"

于 2011-05-04T11:49:09.677 回答
1

在这种情况下,我认为 refreshonshow 不起作用,因为您希望在提交时刷新窗口。所以从子窗口调用一些函数。并且该子窗口的代码必须存在于父窗口的脚本部分。

在我的情况下,我使用这种方式希望这可能会有所帮助。

function test(name) 
{
    ColdFusion.Window.hide(name);
    window.location.reload();
}

所以我在我的子窗口中给出了一个名为隐藏窗口的按钮,当单击此按钮时,由于子窗口中的代码,将激活 test() 函数。

onClick="javascript:test('#url.empname#')"
于 2013-08-12T09:35:35.517 回答