2015-05-29 56 views
1

我有一个奇怪的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模式就保持不变。 由于某些奇怪的原因,这个特殊字符被编码,而其他一切都不重要。

+0

我的直觉是库需要一个解码的字符串。 – royhowie

+0

@royhowie完全解码的字符串(请参见第一个列表项)不适合,因为我需要像这样的实体('Element%3AInfo%2CID')字符串 – OddDev

回答

1

它不完全像“%”正在编码,其他一切都没有编码。

我也遇到过这个问题。 SAPUI5会进行一次编码,而浏览器会再次进行编码。因此在第二次迭代中,只有“%”被编码。

初始字符串:Element:Info,ID

编码的第一次迭代后(由UI5框架)encodeURIComponent('Element:Info,ID'):我们得到Element%3AInfo%2CID

所以对于第二迭代,只剩%进行编码Element%253AInfo%252CID因此,我们得到这个。

因此,如果您从URL中获取绑定上下文,则需要解码两次。 否则,你一次做的很好。

相关问题