获取压缩表行的绑定数据对象 - getBindingContext()返回undefined

时间:2014-07-22 19:27:07

标签: sapui5

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

我已经检查了How to get content of a row in 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>     

这里的相关部分显然是:

<ColumnListItem
  type="Navigation"
  press=".handleLineItemPress"
>

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

handleLineItemPress: function(evt) {
  console.log('evt.getSource: ' + evt.getSource());
  console.log('evt.getBindingContext: ' + evt.getSource().getBindingContext());
}

记录如下:

  

evt.getSource:Element sap.m.ColumnListItem #__ item11-StatusJobs - lineItemList-0   evt.getBindingContext:undefined

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

evt.getSource().getCells()[0].getText();

但这似乎不是正确的方法,特别是不提供整个对象或其唯一ID,我碰巧没有在表中显示。

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

items="{
  path: 'statusJobs>/jobs',
  sorter: {
    path: 'start',
    descending: true
  }
}"

1 个答案:

答案 0 :(得分:15)

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

所有这些都与命名模型的使用有关,在您的情况下statusJobs

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

evt.getSource().getBindingContext("statusJobs");

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

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

var obj = evt.getSource().getBindingContext("statusJobs").getObject();

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