如何在xp:repeat中将编辑模式与响应同步

时间:2016-11-27 14:27:10

标签: xpages

注意事项,我有一份主要文件及其回复文件。 XPage-wise,主要doc和响应显示在同一个xp:view中,响应位于xp:table中,由xp:repeat

构成

该表的每一行都有一个面板,其数据源当然与特定响应绑定。

到目前为止,非常简单,不是吗?

我非常希望确保主文档的编辑模式和响应在任何时候都是同步的。有点像:

  1. 一切都处于只读模式
  2. 用户将主文档切换到编辑模式,所有响应自动切换到编辑模式
  3. 反之亦然:将主文档切换为只读将响应切换为只读
  4. 我试图动态计算"动作"行中数据源的属性,但似乎不起作用。

    我正在考虑以某种方式让回复听取事件"主要文档更改模式"并采取相应的行动,但我似乎无法绕过如何做到这一点。具体来说,那会是哪个事件?然后,如何让回复听取其他地方发生的事件?

    任何提示都表示赞赏 THX

    编辑:几天后回来,如果有人还在那里。

    根据stwissel的建议,这里是代码:

        <?xml version="1.0" encoding="UTF-8"?>
        <xp:view
            xmlns:xp="http://www.ibm.com/xsp/core"
            xmlns:xe="http://www.ibm.com/xsp/coreex"
            style="background-color:rgb(217,217,255)">
            <xp:this.data>
                <xp:dominoView
                    var="subdocsNotesView"
                    viewName="#{javascript:compositeData.subdocsNotesView}"
                    categoryFilter="#{javascript:compositeData.ctnrK}">
                </xp:dominoView>
            </xp:this.data>
    
            <xp:table>
                <xp:repeat
                    id="leRepeat"
                    value="#{subdocsNotesView}"
                    var="oneDoc">
                    <xp:tr>
                        <xp:panel id="rowPanel">
                            <xp:this.data>
                                <xp:dominoDocument
                                    var="rowData"
                                    formName="Person"
                                    documentId="#{javascript:oneDoc.getDocument().getUniversalID()}"
                                    action="editDocument">
                                </xp:dominoDocument>
                            </xp:this.data>
                            <xp:td>
                                <xp:inputText
                                    id="Name"
                                    value="#{rowData.Name}"
                                    defaultValue="#{javascript:oneDoc.getDocument().getItemValueString('Name')}">
                                </xp:inputText>
                            </xp:td>
                        </xp:panel>
                    </xp:tr>
                </xp:repeat>
            </xp:table>
        </xp:view>
    

2 个答案:

答案 0 :(得分:1)

使用面板围绕您的重复控件。
根据主要文档的阅读或编辑模式计算面板的属性readonly 使用布尔viewScope变量&#34; editMode&#34;记住当前的模式。

<xp:table>
    <xp:panel readonly="#{ not viewScope.editMode}">
        <xp:repeat ...>
             ...
        </xp:repeat>
    </xp:panel>
</xp:table>

按钮中的更改模式:

<xp:button value="Editmode" id="button1">
    <xp:eventHandler event="onclick" submit="true"
        refreshMode="complete">
        <xp:this.action>
            <xp:actionGroup>
                <xp:changeDocumentMode mode="edit" var="mainDocument">
                </xp:changeDocumentMode>
                <xp:executeScript>
                    <xp:this.script><![CDATA[#{javascript:
                         viewScope.editMode = true
                    }]]></xp:this.script>
                </xp:executeScript>
            </xp:actionGroup>
        </xp:this.action>
    </xp:eventHandler>
</xp:button>
<xp:button value="Readmode" id="button2">
    <xp:eventHandler event="onclick" submit="true"
        refreshMode="complete">
        <xp:this.action>
            <xp:actionGroup>
                <xp:changeDocumentMode mode="readOnly" var="mainDocument">
                </xp:changeDocumentMode>
                <xp:executeScript>
                    <xp:this.script><![CDATA[#{javascript:
                         viewScope.editMode = false
                    }]]></xp:this.script>
            </xp:actionGroup>
        </xp:this.action>
    </xp:eventHandler>
</xp:button>

即使重复的dominoDocument始终具有属性action="editDocument",当面板的属性readonly为真时,重复文档仍处于读取模式。
如果面板的属性readonly为false,则重复文档处于编辑模式 这样,主文档和重复文档的编辑模式就会同步。

答案 1 :(得分:0)

我建议使用实现模型视图控制器(MVC)的Managed Bean。视图范围中的Controller Bean包含当前的Main Doc模型,并协调对主doc及其响应的访问。主文档模型将包含一个响应文档模型数组,以便在模型中管理数据时在Controller上管理读取模式。

约翰·达尔斯加德(John Dalsgaard)在here找到了关于这一主题的精彩演讲。

我将此方法用于父/子文档以及包含相关或同步列表项的文档。

快乐的编码。