Sapui5 如何在UI5中通过XML模板覆盖/禁用'Dialog'的'escapeHandler'?

Sapui5 如何在UI5中通过XML模板覆盖/禁用'Dialog'的'escapeHandler'?,sapui5,Sapui5,我知道在UI5中通过控制器重写的默认行为,例如: this.\u oDialog.setEscapeHandler((oEscapeHandler)=>{ oEscapeHandler.reject(); }); 问题是,是否可以通过XML模板提供另一种escapeHandler行为,而不使用setEscapeHandler 理想情况下,它应该类似于escapeHandler=“none/customFunction”,例如: 特别是,我想禁用按下Esc按钮时关闭的对话框,并通过XML模板

我知道在UI5中通过控制器重写的默认行为,例如:

this.\u oDialog.setEscapeHandler((oEscapeHandler)=>{
oEscapeHandler.reject();
});
问题是,是否可以通过XML模板提供另一种
escapeHandler
行为,而不使用
setEscapeHandler

理想情况下,它应该类似于
escapeHandler=“none/customFunction”
,例如:



特别是,我想禁用按下Esc按钮时关闭的
对话框
,并通过XML模板以优雅、声明的方式执行,例如
escapeHandler=“none”
我通过放置属性
escapeHandler=“customFunction”解决了这个问题
然后在控制器中没有实现功能。基本上,在
customFunction
中,我有一条评论解释说这是用来覆盖默认的转义行为的。

有一个(今天合并的)可以将控制器功能分配给
escapeHandler
。因此,现在可以使用以下代码:


handleEscape:function(pEscapePending){
//根据用例,调用pEscapePending.resolve()或pEscapePending.reject()覆盖默认行为。
},

1.86版本应提供该修复程序。

相关增强请求:给出一个更一般的请求,以修复等待函数但仍然是
“any”
的剩余属性。遗憾的是,到目前为止还没有干净的解决方案,除非维护人员解决了上述问题。我尝试了您的方法,将
escapeHandler=“customFunction”
添加到
对话框
XML片段内的
对话框
标记中,但没有成功。请您分享一些代码片段,可能我遗漏了一些次要但却很重要的东西。我检查了代码,因为我不久前写了这篇文章,并且在打开对话框之前使用了setEscapeHandler,所以它基本上与您所做的相同。您的解决方案似乎更好一些,我还使用了empty方法,而不是使用oEscapeHandler.reject()。很抱歉误导您,我也很难找到解决方案,似乎使用escapeHandler=“customFunction”是行不通的。圣诞老人今年来的比平时还要早!我已经在1.86上测试过了,一切都很好@米凯布。我刚刚将
onEsc
重命名为
handleEscape
**<默认情况下,***
上的代码>某些东西是私有的(不仅按照惯例,而且还按照API)。而
escapeHandler
不是一个事件,而是一个等待函数的属性。“我们不能去那里。”米凯布。参数本身不是承诺,但它是处理转义的内部承诺的包装器。另一方面,文档还提到“此属性需要一个带有类型为Promise的参数的函数。在该函数中,您应该对Promise对象调用
resolve()
reject()
”。。。让我们假装这是一个承诺:)@MikeB。您可以随意命名处理程序。但是,在UI5的上下文中,默认情况下以
on
开头的方法是私有的(“如果属性名称不是以下划线或前缀“on”开头,则属性名称将自动添加到公共方法列表中”),并且通常为事件处理程序保留。由于
escapeHandler
不是事件,而且处理程序也可由其他类使用,因此处理程序不应以
on
开头。