将视图面板中的行数据var作为属性传递给自定义控件

时间:2012-10-31 12:34:14

标签: custom-controls xpages

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

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

  

名称:rowEntry

     

输入:com.ibm.xsp.model.ViewRowData

这是我的视图面板中ccColDocLocking的示例;如果我在所有View Panel上使用相同的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]&#39; compositeData&#39;找不到

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

3 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:2)

我在Lotus Notes和Domino应用程序开发维基中找到了这个  这可能会对你有所帮助:

  

在自定义控件中:

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

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

答案 2 :(得分:0)

[![][1]] 2

为&#39; com.ibm.xsp.model.ViewRowData&#39;使用var Picker Editor自定义控件内的自定义属性类型。在视图面板中设置自定义属性值。请看屏幕截图fyr。