Sapui5 使用部件和静态值调用格式化程序不会';行不通

Sapui5 使用部件和静态值调用格式化程序不会';行不通,sapui5,Sapui5,基本上,我想使用格式化程序函数来填充sap.m.ObjectStatus(文本,状态,图标)的3个属性,具体取决于一些静态值 奇怪的是;如果在XML中省略值部分,则调用该函数。如果包含该函数,则该函数从一开始就不会被调用 作为这篇文章的答案之一,如果UI5版本高于1.61,则使用值传递参数应该有效。我们使用1.71.2 在代码中的其他地方,这是可行的 如何解决此问题?我怀疑存在限制(可能是错误): 如果您不使用命名模型,这对我适用: ??=“{parts:[{path:'a'},{path

基本上,我想使用格式化程序函数来填充
sap.m.ObjectStatus
文本
状态
图标
)的3个属性,具体取决于一些静态值


奇怪的是;如果在XML中省略
部分,则调用该函数。如果包含该函数,则该函数从一开始就不会被调用

作为这篇文章的答案之一,如果UI5版本高于1.61,则使用
值传递参数应该有效。我们使用1.71.2

在代码中的其他地方,这是可行的


如何解决此问题?

我怀疑存在限制(可能是错误):

如果您不使用命名模型,这对我适用:

<代码> ??=“{parts:[{path:'a'},{path:'b'},{path:'c'},{path:'d'},{value:23}],格式化程序:'.myFormatter'}”

控制台输出:
1“stringB”stringC“stringD”23

当我给我的模型命名时,它就停止工作了。 现在,如果可能的话,为您的数据使用默认模型-不理想

将命名模型指定为默认(未命名)模型后,请尝试(您可能需要进行一些模型名称交易?!):


虽然这可以让它正常工作,但您可能想向UI5团队提出这一点?

目前,由于如果不进行大量重构,将绑定更改为Bernard propsed这样的默认绑定是不可能的,因此我稍微更改了格式化程序逻辑,以便创建3个单独的函数(带有4个参数)调用原始convertRoleStatus函数,每个函数对第五个参数(即模式)具有不同的输入。

我将向SAP报告此问题,希望有一天能够解决。

更新:此问题现已解决,将在1.80+版本中提供。
现在,即使没有下面提到的任何解决方法,也可以使用静态绑定


原始答案(解决方法):

这一问题现在已在本报告中报道。谢谢你让我们意识到这一点

一个快速的“修复”(我会说是一个猴子补丁)是在静态绑定信息中添加
model:'myExistingModel'

零件:[
{path:'currentRoles>STATE_TEXT'},
{path:'currentRoles>STATE'},
{path:'currentRoles>REFERENCED_ENTRY/SV_RH_ROLE_ACTIVE'},
{path:'currentRoles>无效'},
{value:'text',model:'currentRoles'}
],

这个修复实际上没有意义,因为静态绑定没有任何模型,但是可以在正式修复之前使用,而无需进行大量重构。

遗憾的是,默认模型已经被采用了。尽管如此,谢谢你的建议,因为这消除了我的困惑。目前可能的解决方案:
let model = new JSONModel(this.getData());
this.getView().setModel(model);
myFormatter: function (a, b, c, d, v) {
  console.log(a, b, c, d, v);
},
getData: function(){
  return {"testdata": [
    { a: 1, b: "stringB", c: "stringC", d: "stringD"},
    ]};
  }
parts: [
            {path: 'STATE_TEXT'},
            {path: 'STATE'},
            {path: 'REFERENCED_ENTRY/SV_RH_ROLE_ACTIVE'},
            {path: 'invalid'},
            {value: 'text'}
        ],