“%”正在获取URI解码,而其他所有不是
我有一个奇怪的UI5问题。我创建控件的绑定上下文,它看起来像一个字符串:“%”正在获取URI解码,而其他所有不是
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')
的问题是(要知道,这是越来越好奇),我的URL模式 “{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模式就保持不变。 由于某些奇怪的原因,这个特殊字符被编码,而其他一切都不重要。
它不完全像“%”正在编码,其他一切都没有编码。
我也遇到过这个问题。 SAPUI5会进行一次编码,而浏览器会再次进行编码。因此在第二次迭代中,只有“%”被编码。
初始字符串:Element:Info,ID
编码的第一次迭代后(由UI5框架)encodeURIComponent('Element:Info,ID')
:我们得到Element%3AInfo%2CID
所以对于第二迭代,只剩%进行编码Element%253AInfo%252CID
因此,我们得到这个。
因此,如果您从URL中获取绑定上下文,则需要解码两次。 否则,你一次做的很好。
我的直觉是库需要一个解码的字符串。 – royhowie
@royhowie完全解码的字符串(请参见第一个列表项)不适合,因为我需要像这样的实体('Element%3AInfo%2CID')字符串 – OddDev