使用来自同一模型的参数进行SAPUI5 XML视图绑定
我有以下问题: 我想开发一个购物车,但产品卡的计数器有问题,在摘要视图中显示数据也有问题 对于这个项目,我使用XML视图,我已经阅读了很多关于绑定的内容。当我想要绑定一个静态路径时,我没有问题。数据来自一个名为“cartData”的JSON模型 示例(来自goToCart按钮) 所有内容都显示正确(在示例中),但对于我的项目,我需要绑定一个主绑定(用于购物车的计数器),并且该路径需要用户的一个参数。它保存在示例中所示的路径上 我已经尝试了很多组合来实现这个bug,但现在我没有更多的想法:-( 我尝试过的组合示例如下:使用来自同一模型的参数进行SAPUI5 XML视图绑定,xml,routing,sapui5,Xml,Routing,Sapui5,我有以下问题: 我想开发一个购物车,但产品卡的计数器有问题,在摘要视图中显示数据也有问题 对于这个项目,我使用XML视图,我已经阅读了很多关于绑定的内容。当我想要绑定一个静态路径时,我没有问题。数据来自一个名为“cartData”的JSON模型 示例(来自goToCart按钮) 所有内容都显示正确(在示例中),但对于我的项目,我需要绑定一个主绑定(用于购物车的计数器),并且该路径需要用户的一个参数。它保存在示例中所示的路径上 我已经尝试了很多组合来实现这个bug,但现在我没有更多的想法:-( 我
text="{ ${cartData>/cartOfUser/} + {cartData>/currentUser} + '/roles/counter'}"
编辑:
我的代码中的一些虚拟部分:
我的按钮(还不起作用我需要什么…):
带注释的我的JSON数据:
按钮现在的外观:
目标是获取“currentChoice”的值,并将其用作“参数”,以便为正确的用户调用信息
我也试过:
text="{= ${= 'cartProducts>/cartEntries/' + ${cartProducts>/currentChoice/} + '/addedRoles/counter' } }"
有效但我更需要“动态”的是:
我希望你们现在明白我的意思了-/
致意
解决方案
我如何解决问题:
尝试使用以下方法: 在i18n文件中:
cartInfoTitle=User: {0} has: {1} items in the cart
在XML视图中:
<Text text="{
parts: [
{path: 'i18n>cartInfoTitle'},
{path: 'modelName>/property1'},
{path: 'modelName>/property2'}
],
formatter: 'jQuery.sap.formatMessage'
}" />
因此,您需要声明i18n条目,然后使用预定义的格式化程序将占位符替换为“parts”数组()中的值。好的,回答如下:您不能在绑定中使用表达式(同样适用于类)。因此,要获得所需的输出,您确实需要一个格式化程序+在绑定部分中包含JSON模型所需的顶级元素(以便正确更新) XML(我假设您的模型名为“cartData”)
[未测试的代码]您需要一个格式化程序(或不同的绑定方法)。如果您共享一些代码,可能会有更多帮助:)cartOfUser属性包含什么?@AndriiNaumovych:它包含有关用户及其购物车的信息。
text="{= ${= 'cartProducts>/cartEntries/' + ${cartProducts>/currentChoice/} + '/addedRoles/counter' } }"
text="{cartProducts>/cartEntries/UserId14/addedRoles/counter}"
cartInfoTitle=User: {0} has: {1} items in the cart
<Text text="{
parts: [
{path: 'i18n>cartInfoTitle'},
{path: 'modelName>/property1'},
{path: 'modelName>/property2'}
],
formatter: 'jQuery.sap.formatMessage'
}" />
<Text text="{
parts: [
'cartData>/cartEntries',
'cartData>/currentChoice'
],
formatter: '.myFormatter'
}" />
controller.prototype.myFormatter = function (cartEntries, currentChoice) {
if (cartEntries && cartEntries[currentChoice]) {
return cartEntries[currentChoice].addedRoles.counter;
}
}