SAPUI5 1.38中如何监听sap.uxap.ObjectPageSection点击事件?
SAPUI5 1.38中ObjectPageSection点击事件的解决方案
在SAPUI5 1.38版本中,sap.uxap.ObjectPageSection本身并未暴露点击事件接口,直接给控件实例绑定attachBrowserEvent或addEventDelegate无效的原因是:控件的可交互区域(如标题栏)属于内部子DOM节点,事件没有绑定到正确的触发元素上。以下是两种可行的解决思路:
方案一:绑定到Section的标题栏DOM元素
针对用户点击区段标题的常见场景,直接定位到标题栏的DOM节点并绑定点击事件:
onAfterRendering: function () { var oSection = this.byId("section2"); // 获取Section标题栏的DOM节点(1.38版本对应CSS类为sapUxAPObjectPageSectionTitle) var oTitleDom = oSection.getDomRef().querySelector(".sapUxAPObjectPageSectionTitle"); if (oTitleDom) { oTitleDom.addEventListener("click", function() { sap.m.MessageToast.show("Section 2 被点击"); }); } }
方案二:利用事件委托绑定到父容器
若需要监听多个Section的点击事件,可给父容器ObjectPageLayout绑定事件委托,通过判断点击目标所属的Section来处理:
onAfterRendering: function () { var oObjectPage = this.byId("ObjectPageLayoutId"); var oOpDom = oObjectPage.getDomRef(); oOpDom.addEventListener("click", function(oEvent) { var oTarget = oEvent.target; // 向上查找点击目标所属的Section节点 var oSectionDom = oTarget.closest(".sapUxAPObjectPageSection"); if (oSectionDom && oSectionDom.id === "section2") { sap.m.MessageToast.show("Section 2 被点击"); } }); }
修改后的完整Controller代码
sap.ui.define([ "sap/ui/core/mvc/Controller" ], function (Controller) { "use strict"; return Controller.extend("test123.test123.controller.View1", { onInit: function () { }, onAfterRendering: function () { // 方案一:绑定到标题栏 var oSection = this.byId("section2"); var oTitleDom = oSection.getDomRef().querySelector(".sapUxAPObjectPageSectionTitle"); if (oTitleDom) { oTitleDom.addEventListener("click", function() { sap.m.MessageToast.show("Section 2 被点击"); }); } // 可选:方案二(注释掉方案一即可启用) /* var oObjectPage = this.byId("ObjectPageLayoutId"); var oOpDom = oObjectPage.getDomRef(); oOpDom.addEventListener("click", function(oEvent) { var oTarget = oEvent.target; var oSectionDom = oTarget.closest(".sapUxAPObjectPageSection"); if (oSectionDom && oSectionDom.id === "section2") { sap.m.MessageToast.show("Section 2 被点击"); } }); */ } }); });
内容的提问来源于stack exchange,提问作者olgab
相关产品推荐
相关产品推荐

