是否可以在视图中进行数据绑定?

时间:2017-03-01 11:26:13

标签: xpages

post开始,感谢Simon Delicata的回答和评论。我可以保存从视图中获取所选文档并另存为单独的文档。

我对这种方法有疑问。如果我编辑文档,我会点击将我重定向到编辑页面的链接,编辑页面类似于上一篇文章的设计:顶部的组合框,带复选框的视图(使用此视图)用于选择),用于保存视图和组合框中的选择值的按钮。还有另一个视图将显示保存的值。

此处代码可以保存为单独的文档,但不能显示已保存的值并放置" tick"复选框中的符号。

<xp:table id="table1a">
    <xp:tr>
        <xp:td id="table1">
            <xp:comboBox id="comboBox1"
                dojoType="dijit.form.ComboBox" style="width:250.0px"
                value="#{document1.Category}">
                <xp:selectItems id="selectItems3">
                    <xp:this.value><![CDATA[#{javascript:var SetFirstValueBlank = @Text("");
                    return SetFirstValueBlank;
                }]]></xp:this.value>
                </xp:selectItems>
                <xp:selectItems id="selectItems4">
                    <xp:this.value><![CDATA[#{javascript:@Unique(@DbColumn(@DbName(), "CategoryListView", 1));}]]></xp:this.value>
                </xp:selectItems>
                <xp:eventHandler event="onchange" submit="true"
                    refreshMode="partial" refreshId="table1a">
                </xp:eventHandler>
            </xp:comboBox>
            <xp:text escape="true" id="computedField1">
            </xp:text>
        </xp:td>
    </xp:tr>
    <xp:tr>
        <xp:td>
            <xp:viewPanel rows="10" id="viewPanel1" var="rowData">
                <xp:this.data>
                    <xp:dominoView var="view1"
                        viewName="hListView">
                    </xp:dominoView>
                </xp:this.data>
                <xp:viewColumn columnName="ItemName"
                    id="viewColumn1" style="background-color:rgb(255,255,255)"
                    showCheckbox="true">
                    <xp:viewColumnHeader value="Item Name"
                        id="viewColumnHeader1" rendered="false">
                    </xp:viewColumnHeader>
                </xp:viewColumn>
                <xp:this.facets>
                    <xp:pager partialRefresh="true"
                        layout="Previous Group Next" xp:key="footerPager" id="pager2">
                    </xp:pager>
                </xp:this.facets>
            </xp:viewPanel>
            <xp:br></xp:br>
            <xp:button value="Add" id="button1"
                style="height:35.0px">
                <xp:eventHandler event="onclick" submit="true"
                    refreshMode="complete">
                    <xp:this.action><![CDATA[#{javascript:var Category = getComponent("comboBox1").getValue();
                    var viewPanel=getComponent("viewPanel1");
                    var docIDArray=viewPanel.getSelectedIds();
                    var unidArray = new Array();
                    for(i=0; i < docIDArray.length; i++) {
                   var unid=database.getDocumentByID(docIDArray[i]).getUniversalID();
                      unidArray.push(unid);
                    }
                    viewScope.put("unidArray", @Implode(unidArray, ","));
                for(var i=0; i< unidArray.length;i++ )
                {
                    var mdoc = database.createDocument();
                    mdoc.appendItemValue("Form", "ItemForm");
                    mdoc.appendItemValue("ItemName",unidArray[i]);

                    if(mdoc.computeWithForm(false,false))
                    {       
                        mdoc.save(true, true);  
                        getComponent("computedField9").setValue("Record saved");        
                    }
                    else
                    {
                    }
                }
        }]]></xp:this.action>
                </xp:eventHandler>
            </xp:button>
            <xp:br></xp:br>
            <xp:br></xp:br>
            <xp:viewPanel rows="6" id="viewPanel2">                     
                    <xp:this.data>
                        <xp:dominoView var="view2" viewName="CategoryItemView">
                            <xp:this.categoryFilter><![CDATA[#{javascript:getComponent("comboBox1").getValue();}]]></xp:this.categoryFilter>
                        </xp:dominoView>
                    </xp:this.data>
                    <xp:this.rendered><![CDATA[#{javascript:var value = getComponent("comboBox1").getValue();
                    if(value =="" || value == null)
                    {
                        return false;
                    }
                    else
                    {
                        return true;
                    }}]]></xp:this.rendered><xp:viewColumn id="viewColumn4" columnName="Category" rendered="false">
                        <xp:this.facets>
                            <xp:viewColumnHeader xp:key="header" id="viewColumnHeader4" value="Category">
                            </xp:viewColumnHeader>
                        </xp:this.facets>
                    </xp:viewColumn>
                    <xp:viewColumn id="viewColumn3" columnName="$10">
                        <xp:this.facets>
                            <xp:viewColumnHeader xp:key="header" id="viewColumnHeader3" value="Category">
                            </xp:viewColumnHeader>
                        </xp:this.facets>
                    </xp:viewColumn>
                    <xp:viewColumn columnName="ItemName" id="viewColumn2">
                        <xp:viewColumnHeader value="Item" id="viewColumnHeader2">
                        </xp:viewColumnHeader>
                    </xp:viewColumn>
                    <xp:this.facets>
                        <xp:pager partialRefresh="true" layout="Previous Group Next" xp:key="footerPager" id="pager3">
                        </xp:pager>
                    </xp:this.facets></xp:viewPanel><xp:br></xp:br></xp:td>
                </xp:tr>
            </xp:table>

据我所知,假设有一个编辑框或一个组合框,如果我使用数据绑定绑定到一个字段并保存它,编辑框或组合框可以在编辑时显示保存的值。

所以我想知道&#34;类似的方法&#34;适用于视图?我在互联网上搜索并没有太多关于它的信息。

我单击视图并单击“属性”选项卡中的“数据”,我注意到视图确实具有绑定到表单域的数据绑定。

因此可以在视图中进行数据绑定,以便视图在编辑时显示保存的值。谢谢。

1 个答案:

答案 0 :(得分:1)

您没有绑定到文档,而是绑定到dominoDocument对象中的属性。 dominoDocument对象是数据库中基础文档的Java包装器,因为文档是读写的,所以也将所有字段公开为读写,从而允许将可编辑组件绑定到它们。如果编辑框绑定到只读属性,我怀疑它不会显示为可编辑。

dominoView对象是底层视图的Java包装器,并返回NotesXspViewEntry对象的集合,即视图中的每一行。那些不是可读写的(Notes客户端可编辑列不编辑视图条目,它们提供了一个可编辑区域,通过后端代码写入底层文档)。您需要考虑绑定到&#34;与视图中的视图条目相对应的文档&#34;。

“视图面板”列可以包含组件,而不仅仅是映射到列值。视图面板是具有受限布局和设置的重复控件,因此它采用相同的方法。在ViewPanel上设置var属性 - 这是一个变量,用于获取当前NotesXspViewEntry的句柄。您无法拖放到列中,如果我没记错的话,您需要将组件的代码粘贴到相关位置。

如果您希望它可编辑,那么您需要一个dominoDocument数据源。或者,重现Notes客户端可编辑视图列方法的方法,绑定到临时变量(例如requestScope属性)并在完成该过程时更新后端文档。另一种方法是启动对话框,传递当前行的UNID,然后进行编辑。另一种方法是使用XPages Extension Library中的In Place Form。

以下是IBM Connect 2013的演示和演示,其中我做了类似的事情,使列可编辑http://www.intec.co.uk/session-slides-and-sample-database-from-ibm-connect/

更多现代视图组件(如数据视图)使其更容易。