如何从表中获取所有值

时间:2015-09-04 18:16:47

标签: javascript sap sapui5 sap-fiori

我尝试创建简单的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();

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

1 个答案:

答案 0 :(得分: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());
});

稍微复杂一点的方法是反映用户与模型的互动。这可以让您的模型了解所选按钮(即状态),从而始终保持最新状态。为此,您只需听取SegmentedButton的select事件并相应地更新模型中的值:

/** 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);
}