1

我尝试创建简单的 SAP FIORI 应用程序,但在从详细视图中显示的表中检索数据时遇到问题。

我使用 SAP 最佳实践模板(包括路由等)+ XML 视图创建了 Master-Master-Detail 应用程序。

表定义Detail.view.xml

<Table id="Chars" inset="false" items="{CharSet}">
  <columns> ... </columns>
  <items>
    <ColumnListItem>
      <cells>
        <ObjectIdentifier text="{CharNo}"/>
        <SegmentedButton selectedButton="none" visible="{isBool}">
          <Button icon="sap-icon://accept" id="sbOK" text="OK"/>
          <Button icon="sap-icon://sys-cancel" id="sbNOK" text="Not OK"/>
        </SegmentedButton>
      </cells>
    </ColumnListItem>
  </items>
</table>

我试图在onSubmit函数中获取显示的数据和选定的按钮Detail.controller.js,但是每个代码语法,我尝试的结果都出现如下错误:

未捕获的 TypeError:oTable.getContextByIndex 不是函数

唯一有效的是函数,它返回表的行数:

var rowCount = this.getView().byId("Chars").getBinding("items").getLength();

如何从表格的所有行中获取选定的按钮?

4

1 回答 1

0

在处理程序中获取此信息的快速方法onSubmit如下所示:

var items = this.getView().byId("Chars").getItems();
items.forEach(function(item){
    // log to the console for debugging only:        
    console.log(item.getCells()[1].getSelectedButton());
});

稍微复杂一点的方法是将用户交互反映到您的模型中。这使您的模型知道所选按钮(即状态),因此始终是最新的。为此,您只需监听selectSegmentedButton 的事件并相应地更新模型中的值:

/** listener for select event of SegmentedButton */
onSelect : function(oEvent) {
    var sId = oEvent.getParameter("id"),
        oButton = oEvent.getParameter("button"),
        oBindingContext = oButton.getBindingContext(),
        sNewStatus = sId.startsWith("sbOK") ? "OK" : "NOT OK";

    // update model
    oBindingContext.getModel().setProperty("status", sNewStatus, oBindingContext);
}
于 2015-09-04T20:10:20.107 回答