SAP UI5:获取压制表行的绑定数据对象

Mat*_*adt 4 sapui5

在SAP UI5中,当用户按下它时,我尝试获取绑定到表行的数据对象(在我的控制器中).我的视图在xml中定义,我的控制器当然在JS中.

我已经检查了如何在sap.m.table中获取行的内容,但它对我不起作用,或者缺少某些东西.

我的观点(相关部分):

<Panel>
  <Table id="lineItemList" items="{
    path: 'statusJobs>/jobs',
    sorter: {
      path: 'start',
      descending: true
    }
  }">
  <headerToolbar>
    <!-- ... -->
  </headerToolbar>
  <columns>
    <Column hAlign="Left" vAlign="Middle">
      <Label text="Job" />
    </Column>
    <Column hAlign="Center" vAlign="Middle">
      <Label text="Start" />
    </Column>
    <Column hAlign="Center" vAlign="Middle">
      <Label text="End" />
    </Column>
    <Column hAlign="Right" vAlign="Middle">
      <Label text="Success" />
    </Column>
  </columns>
  <ColumnListItem
    type="Navigation"
    press=".handleLineItemPress"
  >
    <Text text="{statusJobs>job}" />
    <Text text="{
      path: 'statusJobs>start',
      formatter:'util.Formatter.Date'}"
    />
    <Text text="{
      path: 'statusJobs>end',
      formatter: 'util.Formatter.Date'}"
    />
    <Text text="{statusJobs>status}"/>
  </ColumnListItem>
</Table>     
Run Code Online (Sandbox Code Playgroud)

这里的相关部分显然是:

<ColumnListItem
  type="Navigation"
  press=".handleLineItemPress"
>
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我有这个:

handleLineItemPress: function(evt) {
  console.log('evt.getSource: ' + evt.getSource());
  console.log('evt.getBindingContext: ' + evt.getSource().getBindingContext());
}
Run Code Online (Sandbox Code Playgroud)

其记录如下:

evt.getSource().getCells()[0].getText();
Run Code Online (Sandbox Code Playgroud)

evt.getSource返回ColumnListItem,因此当然我可以使用对象层次结构并获取单元格的文本,如:

items="{
  path: 'statusJobs>/jobs',
  sorter: {
    path: 'start',
    descending: true
  }
}"
Run Code Online (Sandbox Code Playgroud)

但这似乎不是正确的方式,特别是不给出整个对象或其唯一的id,我碰巧没有在表中显示.

我在某种程度上错过了回到我的数据模型的连接,我之前在代码中绑定了项目,如下所示:

<Panel>
  <Table id="lineItemList" items="{
    path: 'statusJobs>/jobs',
    sorter: {
      path: 'start',
      descending: true
    }
  }">
  <headerToolbar>
    <!-- ... -->
  </headerToolbar>
  <columns>
    <Column hAlign="Left" vAlign="Middle">
      <Label text="Job" />
    </Column>
    <Column hAlign="Center" vAlign="Middle">
      <Label text="Start" />
    </Column>
    <Column hAlign="Center" vAlign="Middle">
      <Label text="End" />
    </Column>
    <Column hAlign="Right" vAlign="Middle">
      <Label text="Success" />
    </Column>
  </columns>
  <ColumnListItem
    type="Navigation"
    press=".handleLineItemPress"
  >
    <Text text="{statusJobs>job}" />
    <Text text="{
      path: 'statusJobs>start',
      formatter:'util.Formatter.Date'}"
    />
    <Text text="{
      path: 'statusJobs>end',
      formatter: 'util.Formatter.Date'}"
    />
    <Text text="{statusJobs>status}"/>
  </ColumnListItem>
</Table>     
Run Code Online (Sandbox Code Playgroud)

Qua*_*ure 16

我不想这么说,但我遇到了同样的问题,我花了很长时间才找到原因......

在您的情况下,这一切都与命名模型的使用有关statusJobs.

如果要检索绑定到命名属性的项的绑定上下文,由于某种原因(老实说,我想不出任何),您还必须指定命名模型:

evt.getSource().getBindingContext("statusJobs");
Run Code Online (Sandbox Code Playgroud)

将返回正确的绑定上下文.

因此,要检索绑定到按下的行项目的实际对象,您可以使用:

var obj = evt.getSource().getBindingContext("statusJobs").getObject();
Run Code Online (Sandbox Code Playgroud)

由于上下文不能绑定到多个模型(据我所知),我真的不明白为什么你需要专门给出命名的模型名称作为参数,但是现在我想我们必须忍受这种行为