0

我有一个<xp:viewColumn>用于文档锁定目的的自定义控件;我需要将视图面板中的行数据变量作为自定义属性传递给我的自定义控件。

我在自定义控件上定义了一个新属性:

名称:rowEntry

类型:com.ibm.xsp.model.ViewRowData

这是我ccColDocLocking在我的视图面板中的一个例子;如果我在所有视图面板上使用相同的 var,它工作正常,但是,我不想对其进行硬编码。

    <xp:viewPanel rows="15" id="viewPanel1" viewStyle="width:100%"
            rowClasses="even,odd" var="rowData">        
       <xp:this.data>
            <xp:dominoView viewName="IntakeForms" var="view1"></xp:dominoView>
       </xp:this.data>
       <xc:ccColDocLocking rowEntry="#{javascript:rowData}"></xc:ccColDocLocking>
       <xp:viewColumn columnName="reqDate" id="viewColumn1"
            displayAs="link" openDocAsReadonly="true">
            <xp:this.converter>
                <xp:convertDateTime pattern="MM/dd/yyyy"></xp:convertDateTime>
            </xp:this.converter>
            <xp:viewColumnHeader value="Request  Date"
                id="viewColumnHeader1" sortable="true">
         </xp:viewColumnHeader>
        </xp:viewColumn>
 </xp:view>

这是来自我的自定义控件:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">    
    <xp:viewColumn id="viewColDocLock">
        <xp:this.facets>
            <xp:viewColumnHeader xp:key="header" id="viewColumnHeader5">
            </xp:viewColumnHeader>
        </xp:this.facets>
        <xp:this.value><![CDATA[#{javascript:""}]]></xp:this.value>
        <xp:image id="imgDocLock">
            <xp:this.url><![CDATA[#{javascript:if (rowData.getDocument().hasItem("$Writers") != "") {
    return "/locked.gif";
}}]]></xp:this.url>
            <xp:this.alt><![CDATA[#{javascript:"Document locked by " + @Name('[Abbreviate]', rowData.getDocument().getItemValueString("$Writers"))}]]></xp:this.alt>
            <xp:this.title><![CDATA[#{javascript:"Document locked by " + @Name('[Abbreviate]', rowData.getDocument().getItemValueString("$Writers"))}]]></xp:this.title>
        </xp:image>
    </xp:viewColumn>
</xp:view>

我得到的错误是:[ReferenceError] 'compositeData' not found

当我尝试替换rowData.getDocument()compositeData.rowEntry.getDocument()

4

3 回答 3

4

如果您将数据源作为复合数据传递给重复数据源,则它需要在页面加载时可用。默认情况下不会发生,默认情况下,重复的框架是在页面加载时创建的,但特定于数据的内容是在运行时计算的。证明是您不能在重复的绑定中使用 ${datasourceName.fieldName},只能使用 #{datasourceName.fieldName}

要执行您想要的操作,您需要在重复上设置 repeatControls="true"。这告诉它“在页面加载时使用此集合中的 x 行创建重复的内容”。然后你可以传递数据源。

但是,因为行和数据是在页面加载时写入的,所以部分刷新不会改变内容。你不能使用寻呼机或类似的东西。您仅限于在页面加载时重复写入的数据。

如果这对您不起作用,您需要将字符串引用传递给自定义控件(例如 UNID),并在自定义控件中添加一个数据源以检索相关数据源。

于 2012-11-02T13:35:53.980 回答
2

我在 Lotus Notes 和 Domino 应用程序开发 wiki 中找到了这个可能对您有所帮助的内容:

在自定义控件中:

<xp:this.beforePageLoad>
<![CDATA[#{javascript:this.setAutoRemove(false);}]]>
</xp:this.beforePageLoad>

来源/更多解释: http ://www-10.lotus.com/ldd/ddwiki.nsf/dx/XPages_compositeData_not_found

于 2012-11-01T06:36:03.663 回答
0

[![][1]] 2

对自定义控件内的“com.ibm.xsp.model.ViewRowData”自定义属性类型使用 var Picker Editor。在视图面板中设置您的自定义属性值。请参阅屏幕截图。

于 2016-06-14T07:57:58.340 回答