Javascript 如何从表中获取所有值

Javascript 如何从表中获取所有值,javascript,sapui5,sap-fiori,Javascript,Sapui5,Sap Fiori,我尝试创建简单的SAPFiori应用程序,但从详细视图中显示的表中检索数据时遇到问题 我使用SAP最佳实践模板(包括路由等)和XML视图创建了Master Detail应用程序 Detail.view.xml中的表定义: <Table id="Chars" inset="false" items="{CharSet}"> <columns> ... </columns> <items&g

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

我使用SAP最佳实践模板(包括路由等)和XML视图创建了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
处理程序中获取此信息的快速方法如下所示:

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的
选择
事件,并相应地更新模型中的值:

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

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的
选择
事件,并相应地更新模型中的值:

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

不幸的是,
items.forEach
生成了一个错误:未捕获类型错误:items.forEach不是function@plota答案的第一行有一个小错误。我刚刚更新了它。请重试。谢谢,这是我需要的,但数据缓存仍然存在问题。当加载详细视图时,所有状态正常,但当我加载另一个详细视图且未按下任何按钮时,上面的代码返回上一个视图的值。何时何地可以清理此文件?@plota如果您正在使用路由器,可以尝试在
onBeforeShow
或routeMatched处理程序中进行清理。看这个。我通过比较Id解决了这个问题,但是非常感谢。我还有一个问题,但如果有必要,我会创建新的主题。非常感谢Tim。不幸的是,
items.forEach
生成了一个错误:未捕获类型错误:items.forEach不是function@plota答案的第一行有一个小错误。我刚刚更新了它。请重试。谢谢,这是我需要的,但数据缓存仍然存在问题。当加载详细视图时,所有状态正常,但当我加载另一个详细视图且未按下任何按钮时,上面的代码返回上一个视图的值。何时何地可以清理此文件?@plota如果您正在使用路由器,可以尝试在
onBeforeShow
或routeMatched处理程序中进行清理。看这个。我通过比较Id解决了这个问题,但是非常感谢。我还有一个问题,但如果有必要,我会创建新的主题。非常感谢蒂姆。