openUI5 - 为什么我的事件TableRow getBindingContext()未定义?

时间:2017-07-31 00:35:00

标签: sapui5

我尝试编写一个带RowAction的简单表来删除行。 我已将表格成功绑定到JSONModel(名为网站)。我已将功能附加到press的{​​{1}}事件,并且可以看到它被成功调用。

但是当调用该函数时,我可以看到传递给事件函数的RowActionItem对象有一些数据(例如,我可以得到sap.ui.base.Event并正确查看要删除的索引),但行数据绑定上下文始终未定义。

我在这里查看了示例:https://openui5.hana.ondemand.com/explored.html#/sample/sap.ui.table.sample.RowAction/preview

有两点需要注意:

1-我不知道在事件函数中使用变量然后在其上使用TableRow是什么。然后欢迎解释。

bind(this)

2-我自己的桌子& RowAction / RowActionItem(s)在视图中以XML格式声明(另一个给了我一些挑战!)。它看起来像这样:

var fnPress = this.handleActionPress.bind(this);

事件函数看起来像这样(直接来自样本):

<t:Table 
    id="clientsTable"
    rows="{path:'sites>/data', templateShareable: false}"
    selectionMode="Single"
    selectionBehavior="RowOnly"
    visibleRowCountMode="auto"
    ariaLabelledBy="title"
    rowSelectionChange="onSelectionChange"
    rowActionCount="1" >
    <t:toolbar>
        <m:Toolbar>
            <m:content>
                <core:Icon
                    src="sap-icon://customer-and-contacts"
                    size="1.5rem"
                    color="#346187"/>
                <m:Title id="clientsTableTitle" text="Client(s)" />
                <m:ToolbarSpacer/>
                <m:Button 
                    id="addClient" 
                    icon="sap-icon://add" 
                    tooltip="Add Client"
                    press="onAddClientPressed" />
                <m:Button 
                    id="exportClients" 
                    icon="sap-icon://action" 
                    tooltip="Export Client(s)" />
            </m:content>
        </m:Toolbar>
    </t:toolbar>

    <t:columns>
        <t:Column width="18rem">
            <m:Label text="System Unique Id" />
            <t:template>
                <m:Text text="{sites>systemGUID}"/>
            </t:template>
        </t:Column>
        <t:Column width="15rem">
            <m:Label text="Client Name" />
            <t:template>
                <m:Input value="{sites>name}"/>
            </t:template>
        </t:Column>
        <t:Column width="22rem">
            <m:Label text="Client Details" />
            <t:template>
                <m:Input value="{sites>description}"/>
            </t:template>
        </t:Column>
    </t:columns>

    <t:rowActionTemplate>
        <t:RowAction>
                <t:RowActionItem 
                    text="Delete Client" 
                    type="Delete"
                    press="onDeleteClientRow" />
        </t:RowAction>
    </t:rowActionTemplate>
</t:Table>

截图: Results

我试图将eveything声明为样本中的代码,但也没有成功。我错过了什么?

1 个答案:

答案 0 :(得分:0)

示例编码与您的编码之间的主要区别在于您的使用命名模型来绑定行。 这意味着为了获得绑定上下文,您必须传递模型名称参数。

var sName = oView.getModel().getProperty("name", oRow.getBindingContext("sites"));

或更短:

var sName = oRow.getBindingContext("sites").getObject("name");

以下是getBindingContextgetObject方法的API。