Xpages:从客户端代码调用部分刷新

时间:2017-03-21 18:45:02

标签: xpages

[更新]

回应弗兰克的建议:

我可以在客户端javascript中获取代码[一般] - 不得不稍微修改一下:

$("#grid").on("dblclick", "tr", function(e) {
        var grid = $("#grid").data("kendoGrid");
        var unid = grid.dataItem($(this)).unid;
        XSP.partialRefreshGet("#{id:dynamicCustomControl}",{params:{"controlName":"ccFormTicket.xsp", "key":unid}});
        });

所以我发送两个部分,controlName和密钥,即UNID。

动态控件中的初始代码是获取viewScope变量,而不是参数。我不知道如何在下面的代码中获取参数...

[我可能犯了Eric的代码格式。我忘记了怎么做。我会解决]

<xp:div
        styleClass="col-lg-10"
        id="content">
        <xe:dynamicContent
            id="dynamicCustomControl">
            <xp:this.facets></xp:this.facets>
            <xp:include
                id="customControlInluder">
                <xp:this.pageName>
                    <![CDATA[${javascript:viewScope.controlName|| "ccViewTickets.xsp"}]]>                   
                    <![CDATA[${javascript:param.controlName || "ccViewTickets.xsp"}]]>  
                </xp:this.pageName> 
            </xp:include>
        </xe:dynamicContent>
    </xp:div>

我的应用程序使用Kendo UI网格来查看我的视图。该应用使用带有动态内容控件的Xpage来加载内容(参见下文)。

用于创建新表单的按钮将viewScope变量设置为自定义控件并执行部分刷新。这很好用。

编辑现有记录时我需要做同样的事情,但是也要使用文档的unid传递requestScope var“key”。

在网格的客户端javascript中,我可以获取被点击的元素的unid:

$("#grid").on("dblclick", "tr", function(e) {
    var grid = $("#grid").data("kendoGrid");
    var unid = grid.dataItem($(this)).unid;             
});

但我无法弄清楚如何设置请求parm并进行局部刷新。

我应该在这里拨打RPC吗?

<xp:button
        id="button2"
        type="button"
        styleClass="btn btn-primary"
        disableTheme="true"
        value="Create OTM Ticket">
        <xp:eventHandler
            event="onclick"
            submit="true"
            refreshMode="partial"
            refreshId="dynamicCustomControl"
            onComplete="XSP.partialRefreshGet('#{id:dynamicCustomControl}')">
            <xp:this.action><![CDATA[#{javascript:var x = "ccFormTicket.xsp"
viewScope.controlName = x;
getComponent("dynamicCustomControl").show(null)}]]></xp:this.action>
        </xp:eventHandler>
    </xp:button>

动态内容控制

<xp:div
    styleClass="col-lg-10"
    id="content">
    <xe:dynamicContent
        id="dynamicCustomControl">
        <xp:this.facets></xp:this.facets>
        <xp:include
            id="customControlInluder">
            <xp:this.pageName>
                        <![CDATA[${javascript:viewScope.controlName||"ccViewTickets.xsp"}]]>
            </xp:this.pageName>
        </xp:include>
    </xe:dynamicContent>
</xp:div>

1 个答案:

答案 0 :(得分:0)

我认为你可以做这样的事情。从双击事件中调用部分刷新:

$("#grid").on("dblclick", "tr", function(e) {
   var grid = $("#grid").data("kendoGrid");
    var unid = grid.dataItem($(this)).unid;  
    XSP.partialRefreshGet('#{id:dynamicCustomControl}',params: {
      'controlName': unid
    })   
});

这将部分刷新动态自定义控件,并通过请求参数从网格传递unid。在服务器端,您可以执行类似以下代码的操作来使用请求参数(使用XPage中的param对象):

<xp:div
styleClass="col-lg-10"
id="content">
<xe:dynamicContent
    id="dynamicCustomControl">
    <xp:this.facets></xp:this.facets>
    <xp:include
        id="customControlInluder">
        <xp:this.pageName>
                    <![CDATA[${javascript:param.controlName || "ccViewTickets.xsp"}]]>
        </xp:this.pageName>
    </xp:include>
</xe:dynamicContent>