我有一个奇怪的UI5问题。我从控件的绑定上下文创建一个字符串,如下所示:
Entity('Element%3AInfo%2CID')
仅供参考,它看起来像是解码的:Entity('Element:Info,ID')
但是,我从以下方法链中获取此字符串:
oItem.getBindingContext().getPath().substr(1)
所以,整体(非常基本的)"导航到"块看起来像这样:
showElement : function (oItem) {
'use strict';
var bReplace = jQuery.device.is.phone ? false : true;
sap.ui.core.UIComponent.getRouterFor(this).navTo("element", {
from: "master",
element: oItem.getBindingContext().getPath().substr(1),
otherpattern: "something"
}, bReplace);
},
此块console.log(oItem.getBindingContext().getPath().substr(1));
中的控制台日志提供了正确的字符串。
console.log的控制台输出(oItem.getBindingContext()。getPath()。substr(1)): 实体('元素%3AInfo%2CID&#39)
问题是(请注意,这很令人好奇)我的网址格式" {element}
"充满了:
Entity('Element%253AInfo%252CID')
解码:Entity('Element%3AInfo%2CID')
正如您可能已经知道的那样,模式"%"被编码。我不明白为什么UI5会这样做。
您还应该了解我已经测试过的这些事实:
decodeURIComponent(oItem.getBindingContext().getPath().substr(1))
会导致" Entity('Element:Info,ID')
" encodeURIComponent(oItem.getBindingContext().getPath().substr(1))
会导致" Entity('Element%25253AInfo%25252CID')
" oItem.getBindingContext().getPath().substr(1).replace("%3A", ":")
会导致" Entity('Element:Info%252CID')
" 这是一个错误吗?我的意思是URI模式保持不变,只要它没有来到"%"。 由于一些奇怪的原因,这个特殊字符被编码,而其他一切并不重要。
答案 0 :(得分:1)
它不完全像“%”被编码,其他一切都没有被编码。
我也遇到过这个问题。 SAPUI5 执行一次编码,浏览器执行第二次编码。因此,在第二次迭代中,您只需编码“%”。
初始字符串:Element:Info,ID
首次迭代编码后(通过UI5框架)encodeURIComponent('Element:Info,ID')
:我们得到Element%3AInfo%2CID
因此,对于第二次迭代,只剩下%编码Element%253AInfo%252CID
,因此我们得到了这个。
因此,如果您从URL获取绑定上下文,则需要解码两次。 另外,你做的一次也没问题。