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'}
],