发票列表已经看起来不错了,但是没有分配价格的发票是什么?通常,价格以技术格式存储,并在数据模型中使用“.”分隔符。例如,我们的菠萝发票的计算价格为 87.2,不含货币。我们将使用 SAPUI5 数据类型来正确格式化价格,使用依赖于区域设置的小数分隔符和分隔符后的两位数。
webapp/view/InvoiceList.view.xml
通过将数字和数字单位属性添加到 ObjectListItem 控件,我们向视图中的发票列表添加价格,然后通过将绑定语法的类型属性设置为 sap.ui.model.type.Currency 来对数字应用货币数据类型。
正如在上面看到的,我们正在对 ObjectListItem 的 number 属性使用特殊的绑定语法。此绑定语法使用所谓的“计算字段”,它允许将来自不同模型的多个属性绑定到控件的单个属性。来自不同模型绑定的属性称为“零件”。在上面的示例中,控件的属性是数字,从两个不同模型中检索的绑定属性(“部件”)是发票>扩展价格和视图>/货币。
我们希望以欧元显示价格,通常货币是后端数据模型的一部分。在我们的例子中,情况并非如此,因此我们需要直接在应用程序中定义它。因此,我们为发票列表添加一个控制器,并使用 currency 属性作为绑定语法的第二部分。货币类型将根据货币代码为我们处理价格的格式。在我们的例子中,价格以 2 位小数显示。
此外,我们将格式选项 showMeasure 设置为 false。这将隐藏属性编号中的货币代码,因为它作为单独的属性编号单位传递给 ObjectListItem 控件。
<mvc:View
controllerName="sap.ui.demo.walkthrough.controller.InvoiceList"
xmlns="sap.m"
xmlns:mvc="sap.ui.core.mvc">
<List
headerText="{i18n>invoiceListTitle}"
class="sapUiResponsiveMargin"
width="auto"
items="{invoice>/Invoices}">
<items>
<ObjectListItem
title="{invoice>Quantity} x {invoice>ProductName}"
number="{
parts: [{path: 'invoice>ExtendedPrice'}, {path: 'view>/currency'}],
type: 'sap.ui.model.type.Currency',
formatOptions: {
showMeasure: false
}
}"
numberUnit="{view>/currency}"/>
</items>
</List>
</mvc:View>
**webapp/controller/InvoiceList.controller.js (New)**为了能够访问不属于我们数据模型的货币代码,我们在发票列表的控制器中定义了一个视图模型。这是一个简单的 JSON 模型,只有一个关键货币和值 EUR。这可以绑定到数字字段的格式化程序。视图模型可以保存分配给控件的任何配置选项,以绑定属性(如可见性)。
sap.ui.define([
"sap/ui/core/mvc/Controller",
"sap/ui/model/json/JSONModel"
], function (Controller, JSONModel) {
"use strict";
return Controller.extend("sap.ui.demo.walkthrough.controller.InvoiceList", {
onInit : function () {
var oViewModel = new JSONModel({
currency: "EUR"
});
this.getView().setModel(oViewModel, "view");
}
});
});
结果:显示了一个带有价格和数量单位的发票清单