我正在擴展SAP標準Fiori應用程序。他們有一種創建sap.m.ViewSettingsDialog
的方法。現在我加入我自己的sap.m.ViewSettingsItem
,其中包含一些sap.m.ViewSettingsFilterItem
。如何獲取和修改/替換/刪除事件偵聽器
現在我想修改/替換/刪除事件confirm
上的監聽器,因爲我無法像SAP那樣將綁定的ODataModel中的值保存到CusomObject中。
我的嘗試是增強他們的確認方法。我搜索了SCN,Stackoverflow和SAPUI5 API以獲取eventhndlers的getter,但我沒有找到任何東西。那麼我怎麼能得到那個對象呢?
對於我的問題的進一步瞭解它的下面:
他們的確認方法:
confirm: function (oEvent) {
//reset the buffered filter arrays
self.filterValueArray.length = 0;
var p = oEvent.getParameters(),
aFilters,
oCallback;
for (var i = 0 ; i < p.filterItems.length; i++) {
if (p.filterItems[i] instanceof sap.m.ViewSettingsCustomItem) { // custom control filter
oCallback = p.filterItems[i].getCustomData()[0].getValue();
aFilters = oCallback.apply(this, [p.filterItems[i].getCustomControl()]);
if (aFilters) {
// the filter could be an array of filters or a single filter so we transform it to an array
if (!Array.isArray(aFilters)) {
aFilters = [aFilters];
}
self.filterValueArray = self. filterValueArray.concat(aFilters);
}
} else if (p.filterItems[i] instanceof sap.m.ViewSettingsItem) { // standard filter
aFilters = p.filterItems[i].getCustomData()[0].getValue();
if (aFilters) {
// the filter could be an array of filters or a single filter so we transform it to an array
if (!Array.isArray(aFilters)) {
aFilters = [aFilters];
}
self.filterValueArray = self.filterValueArray.concat(aFilters);
}
}
}
// apply filters to the table binding
self._updateList(self.getList().getBinding("items"));
// update info toolbar
self.getView().byId("infoBarToolbar").setVisible((self.filterValueArray.length > 0) ? true: false);
self.getView().byId("infoBarFilter").setText((self.filterValueArray.length > 0) ? p.filterString: "");
// save expiry filter state for the "cancel" action
self._setExpiryFilterState();
}
我添加的過濾器
var oBindingInfo = {
path: "/PathToTheKeyValuePairs",
template: new sap.m.ViewSettingsItem({
key: "{Key}",
text: "{Value}",
customData: new sap.ui.core.CustomData({
key: "callback",
value: function(oControl) {
debugger; //getting the data and creating filter here
}
//That would be the SAP Solution Sap does with hardcoded Filter
// key: "filter",
// value: new sap.ui.model.Filter("TargetAttribute", sap.ui.model.FilterOperator.EQ, "{Key}") //fixme It takes the string and no binding info
})
})
};
var oMyCustomFilter = new sap.m.ViewSettingsFilterItem({
key: "myCustomFilter",
text: self.resourceBundle.getText("myFilterName"),
});
oMyCustomFilter.bindAggregation("items", oBindingInfo);
this.filterDialog.addFilterItem(oMyCustomFilter);
我做了一些壞事。我剛剛覆蓋了Eventprovider上的確認。 (私人屬性)。我仍然在尋找一個合適的解決方案。 – inetphantom