【问题标题】:Xpages: Calling partial refresh from client side codeXpages:从客户端代码调用部分刷新
【发布时间】:2017-03-22 23:40:39
【问题描述】:

[更新]

回应弗兰克的建议:

我可以让代码在客户端 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 Grids 用于我的视图。该应用使用带有动态内容控件的 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;             
});

但我不知道如何设置请求参数并进行部分刷新。

我应该在这里调用 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>

【问题讨论】:

    标签: xpages


    【解决方案1】:

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

    $("#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。在服务器端,您可以执行以下代码来使用请求参数(使用 XPages 中的 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>
    

    【讨论】:

    • 看起来不错,我试试看。看来我离得太远了。我不确定我是否可以使用 XSP.partialRefresh....
    • 我不确定“pageName”参数是否在部分刷新时被重新计算,因为它只被评估一次(因为 el 语法中的 $)。我个人在模拟设置中使用 xe:switchFacet,因为它可以让您动态更改当前页面,但我可能对 dynamicContent 有误!
    • 渡轮,我更新了我的问题。我叫你弗兰克,把你和别人搞混了。您认为 xe:switchFacet 效果更好还是更简单?
    • 我无法真正回答这个问题。我在类似的情况下使用了 switchFacet,它可以按照我希望的方式工作。你试过了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多