2015-05-29 3 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() зиЬзЬг (1).): сущностей ('Элемент% 3AInfo% 2CID')

Проблема состоит в том (быть в курсе, что это становится любопытно), что мой URL картины "{element}" заполняется:

Entity('Element%253AInfo%252CID') 

декодируется: Entity('Element%3AInfo%2CID')

As вы, вероятно, уже знаете, кодируется шаблон «%». Я не понимаю, почему 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 Полностью декодированная строка (см. Первый элемент списка) не подходит, потому что мне нужна строка, подобная этой Entity («Элемент% 3AInfo% 2CID») – OddDev

ответ

1

Его не совсем похоже на то, что «%» получает кодировку, а все остальное не закодировано.

Я также столкнулся с этой проблемой. SAPUI5 делает кодирование один раз, и браузер делает это во второй раз. Следовательно, во второй итерации вы будете иметь только «%» для кодирования.

Начальная строка: Element:Info,ID

после первой итерации кодирования (по UI5 рамки) encodeURIComponent('Element:Info,ID'): Мы получаем Element%3AInfo%2CID

Таким образом, для второй итерации, только% остается кодироваться Element%253AInfo%252CID, следовательно, мы получаем это.

Так что, если вы выбираете контекст привязки из URL-адреса, вам необходимо дважды декодировать. Else, как вы делаете один раз, прекрасно.

Смежные вопросы