仅按字符串的某些部分对表进行排序

时间:2018-11-17 13:55:53

标签: sapui5

使用分类器进行分类基本上可以正常工作。一栏是全名(例如“史蒂夫·乔布斯”)。我在该实体集中只有全名,但是我想在单击全名列标题时按姓氏(全名的姓氏)对条目进行排序。有什么方法可以做到这一点?

1 个答案:

答案 0 :(得分:1)

您需要为分类器定义一个自定义比较器,该分类器仅在客户端所有实体可用时才应用 ,例如,将# The select statement is passed a string. cars_subset_2b <- function( select_statement ) { cars %>% dplyr::select(!!select_statement) } cars_subset_2b("dist") 设置为{{ 1}}在定义OData列表绑定时。 API

operationMode
'Client'

Btw:如果服务已实现服务器端分页,则当前为doesn't fetch all entities的“客户端”操作模式。

如上例所示,Sorter constructor可以处理自定义比较器,该自定义比较器将在调用sap.ui.getCore().attachInit(() => sap.ui.require([ "sap/ui/model/odata/v2/ODataModel", "sap/ui/core/mvc/XMLView", "sap/ui/model/json/JSONModel", "sap/ui/model/Sorter", ], (ODataModel, XMLView, JSONModel, Sorter) => { "use strict"; const odataModel = new ODataModel({ serviceUrl: [ "https://cors-anywhere.herokuapp.com/", "https://services.odata.org/V2/Northwind/Northwind.svc/", ].join(""), tokenHandling: false, preliminaryContext: true, }); Promise.all([ odataModel.metadataLoaded(), sap.ui.getCore().loadLibrary("sap.m", true), ]).then(() => XMLView.create({ definition: `<mvc:View xmlns:mvc="sap.ui.core.mvc" xmlns="sap.m" xmlns:core="sap.ui.core" height="100%" > <App> <Page showHeader="false"> <Table id="myResponsiveTable" items="{ path: '/Customers', parameters: { select: 'CustomerID, ContactName', operationMode: 'Client' } }" > <columns> <Column id="customerIdColumn" sortIndicator="{colCustomerId>/sortOrder}" width="33%" > <Text text="Customer ID"> <customData> <core:CustomData key="sorterPath" value="CustomerID" /> </customData> </Text> </Column> <Column id="fullNameColumn" sortIndicator="{colFullName>/sortOrder}" width="auto" > <Text text="Full Name"> <customData> <core:CustomData key="sorterPath" value="ContactName" /> </customData> </Text> </Column> </columns> <ColumnListItem> <Text text="{CustomerID}" /> <Text text="{ContactName}" /> </ColumnListItem> </Table> </Page> </App> </mvc:View>`, afterInit: function() { // === onInit const table = this.byId("myResponsiveTable"); activateColumnPress(table, onColumnPress); }, models: { undefined: odataModel, colCustomerId: new JSONModel({ sortOrder: "None" }), colFullName: new JSONModel({ sortOrder: "None" }), } }).then(view => view.placeAt("content"))); function activateColumnPress(table, handler) { // Making columns clickable for the demo table.bActiveHeaders = true; table.onColumnPress = col => handler(table, col); } function onColumnPress(table, pressedCol) { table.getColumns() .filter(col => !(col.getSortIndicator() === pressedCol.getSortIndicator())) .map(col => col.setSortIndicator("None")); table.getBinding("items").sort(createSorter(pressedCol)); } function createSorter(column) { return column.getHeader().data("sorterPath") === "ContactName" ? createFullNameSorter(column, toggleSort(column.getModel("colFullName"))) : createCustomerIdSorter(column, toggleSort(column.getModel("colCustomerId"))); } function toggleSort(colModel) { const descending = colModel.getProperty("/sortOrder") !== "Ascending"; colModel.setProperty("/sortOrder", descending ? "Ascending" : "Descending"); return !descending; } function createFullNameSorter(column, descending) { const comparator = (a, b) => a.split(" ").pop().localeCompare(b.split(" ").pop()); return new Sorter("ContactName", descending, false, comparator); } function createCustomerIdSorter(column, descending) { return new Sorter("CustomerID", descending); } }));方法时被调用。为了比较全名的最后一部分,您可以这样定义比较器:

<script id="sap-ui-bootstrap"
  src="https://openui5.hana.ondemand.com/resources/sap-ui-core.js"
  data-sap-ui-libs="sap.ui.core"
  data-sap-ui-async="true"
  data-sap-ui-compatversion="edge"
  data-sap-ui-theme="sap_belize"
  data-sap-ui-xx-waitfortheme="true"
></script>
<body id="content" class="sapUiBody sapUiSizeCompact" style="height: 100%;"></body>