如何从 table 获取所有值
How to get all values from table
我尝试创建简单的 SAP FIORI 应用程序,但我在从详细视图中显示的 table 检索数据时遇到问题。
我使用 SAP 最佳实践模板(包括路由等)+ XML 视图创建了 Master-Master-Detail 应用程序。
Table 中的定义 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>
我正在尝试在 Detail.controller.js
的 onSubmit
函数中获取显示的数据和选定的按钮,但是我尝试的每个代码语法都会出现如下错误:
Uncaught TypeError: oTable.getContextByIndex is not a function
唯一有效的函数是 returns 行数 table:
var rowCount = this.getView().byId("Chars").getBinding("items").getLength();
如何从 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 的 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);
}
我尝试创建简单的 SAP FIORI 应用程序,但我在从详细视图中显示的 table 检索数据时遇到问题。
我使用 SAP 最佳实践模板(包括路由等)+ XML 视图创建了 Master-Master-Detail 应用程序。
Table 中的定义 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>
我正在尝试在 Detail.controller.js
的 onSubmit
函数中获取显示的数据和选定的按钮,但是我尝试的每个代码语法都会出现如下错误:
Uncaught TypeError: oTable.getContextByIndex is not a function
唯一有效的函数是 returns 行数 table:
var rowCount = this.getView().byId("Chars").getBinding("items").getLength();
如何从 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 的 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);
}