sap.m.Dialog escapeHandler的操作方法

2020-09-15 09:28发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家您好,

存在 sap.m的新属性 .Dialog ,称为escapeHandler。 有谁知道如何使用它? 从1.44开始可用。 我们使用的是1.44.7,但无法使其正常运行。 它是一个属性,而不是事件处理程序。

 Dialog.fragment.xml部分:
 <对话框标题=" {i18n> chooseWS}" contentHeight =" 100%" contentWidth =" 100%" Stretch =" true" verticalScrolling =" false" escapeHandler =" mayTheForceBeWithMe">

 控制器:
 this._oDialog = sap.ui.xmlfragment(" xxx.xxx.xxxx.xxx.Dialog",this);  this._oDialog.setModel(this.getModel(" i18n")," i18n");
 this._oDialog.open();
 ...
 mayTheForceBeWithMe:function(oPromise){
 如果(!this.oFilterEntry || this.oFilterEntry.workspace ==""){
 oPromise.reject();  }其他{
 oPromise.resolve();
 }
 },
 ... 

未调用函数mayTheForceBeWithMe。

谢谢

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家您好,

存在 sap.m的新属性 .Dialog ,称为escapeHandler。 有谁知道如何使用它? 从1.44开始可用。 我们使用的是1.44.7,但无法使其正常运行。 它是一个属性,而不是事件处理程序。

 Dialog.fragment.xml部分:
 <对话框标题=" {i18n> chooseWS}" contentHeight =" 100%" contentWidth =" 100%" Stretch =" true" verticalScrolling =" false" escapeHandler =" mayTheForceBeWithMe">

 控制器:
 this._oDialog = sap.ui.xmlfragment(" xxx.xxx.xxxx.xxx.Dialog",this);  this._oDialog.setModel(this.getModel(" i18n")," i18n");
 this._oDialog.open();
 ...
 mayTheForceBeWithMe:function(oPromise){
 如果(!this.oFilterEntry || this.oFilterEntry.workspace ==""){
 oPromise.reject();  }其他{
 oPromise.resolve();
 }
 },
 ... 

未调用函数mayTheForceBeWithMe。

谢谢

付费偷看设置
发送
6条回答
悻福寶寶
1楼 · 2020-09-15 10:15.采纳回答

你好Atilla,

我检查了这个问题,发现如果对话框是在XML Fragment中创建的,那么它将无法正常工作。 好像它是在javascript控制器中创建的一样。 我检查了Dialog控制器的代码,这是代码

 if(typeof oEscapeHandler ==='function'){
//创建一个Promise,以允许应用程序开发人员挂接到'escape'事件
//并通过执行它们定义的转义处理函数来防止对话框关闭
 新window.Promise(function(resolve,reject){
 oPromiseArgument.resolve =解决;
 oPromiseArgument.reject =拒绝;


 that.currentPromise = oPromiseArgument;


 oEscapeHandler(that._getPromiseWrapper());
 })
 .then(函数(结果){
 that.close();
 })
 .catch(function(){
 jQuery.sap.log.info("禁止关闭对话框");
 });
 }其他{


 this.close();
 }


           

因此,oEscapeHandler必须是function。 我认为这可能是为什么要检查类型的错误,但是是的,让您使用它的方法是在javascript控制器中使用。

感谢和问候,

Veera

d56caomao
2楼-- · 2020-09-15 10:24

谢谢您提供片段Srikanth

何必丶何苦呢
3楼-- · 2020-09-15 10:34

示例代码可在已开发的应用程序

95年老男孩
4楼-- · 2020-09-15 10:10

谢谢。 解决了基于JS的方法,但是下一次我将使用您的方法。

95年老男孩
5楼-- · 2020-09-15 10:27

您好Attila,正如Veeraraghavan解释的那样,onEscapeHandler无法在XML片段上正常工作,我自己为此问题苦苦挣扎。 但是我想发布一种解决方法,以防其他人遇到此问题:

1.-在Dialog.xml.fragment中,为您的对话框分配一个ID:

  

2.-实例化片段后,将onClose事件处理程序附加到对话框" dlg":

 if(!this._oDialog){
      this._oDialog = sap.ui.xmlfragment(" xxx.xxx.xxxx.xxx.Dialog",this);  this._oDialog.setModel(this.getModel(" i18n")," i18n");
         var that = this;
         var dlg = sap.ui.getCore()。byId(" dlg");
 dlg.attachAfterClose(function(){
/*在这里执行您的逻辑,以确定是否应该关闭对话框,即IE:是否选择了对话框中的某个项目,或者输入是否已填充数据。 如果您确定不应关闭它,请调用this._oDialog,直到满足您的条件为止。*/
 });

 }

 

希望有帮助。

此致。

Haoba3210
6楼-- · 2020-09-15 10:09

嗨,

如果您是通过XML片段创建对话框的,则可以使用以下变通方法来处理转义

 var oFragmentId =" myFragId",oFragmentName =" com.abc.fragment.myPopup";
 如果(!this.myPopup){
/* _createFragment是我创建的XML片段的基本控制器功能*/
 this.myPopup = this._createFragment(oFragmentId,oFragmentName);
/*由于我使用XML视图,我们将在控制器级别附加转义事件处理程序*/
 this.myPopup.setEscapeHandler(function(o){o.reject();}); 

一周热门 更多>