在SAPUI5中,您通常可以通过多种方式将资源包属性绑定到项目。我尝试使用Odata服务提供的数据在JavaScript中进行此操作,但到目前为止我在此处找到的方法尚无法解决。我尝试了两种不同的方式:
binding issue with sap.m.List and model configured in manifest.json
这些都没有奏效。我觉得这是因为我在一个项目列表中,在导致我的问题的对话框中:
我的代码是:
printf( esc_html( _n( '%1$s review for %2$s', '%1$s reviews for %2$s', $count, 'woocommerce' ) ), esc_html( $count ), '<span>' . get_the_title() . '</span>' );
var resourceBundle = this.getView().getModel("i18n");
if (!this.resizableDialog) {
this.resizableDialog = new Dialog({
title: 'Title',
contentWidth: "550px",
contentHeight: "300px",
resizable: true,
content: new List({
items: {
path: path,
template: new StandardListItem({
title: resourceBundle.getProperty("{Label}"),//"{ path : 'Label', fomatter : '.getI18nValue' }",
description: "{Value}"
})
}
}),
beginButton: new Button({
text: 'Close',
press: function () {
this.resizableDialog.close();
}.bind(this)
})
});
使用上面的第二种方法,永远不要调用JavaScript方法。我认为它不会起作用,因为它更基于JSON。第一种方法,可以很好地加载数据,但它不会显示资源包文本,而只显示getI18nValue : function(sKey) {
return this.getView().getModel("i18n").getProperty(sKey);
},
值内的文本。
在{Label}
内找到的值与在资源包内找到的键匹配,即前面没有{Label}
,就像在视图中一样。
有人有任何建议吗?
答案 0 :(得分:1)
使用格式化程序可以解决您的问题,但您执行该操作的方式是错误的。试试这个,它会解决你的问题。
var resourceBundle = this.getView().getModel("i18n");
if (!this.resizableDialog) {
this.resizableDialog = new Dialog({
title: 'Title',
contentWidth: "550px",
contentHeight: "300px",
resizable: true,
content: new List({
items: {
path: path,
template: new StandardListItem({
title: {
parts: [{ path: "Label" }],
formatter: this.getI18nValue.bind(this)
},
description: "{Value}"
})
}
}),
beginButton: new Button({
text: 'Close',
press: function () {
this.resizableDialog.close();
}.bind(this)
})
});
}
格式化程序函数 getI18nValue 将是这样的,
getI18nValue: function(sKey) {
return this.getView().getModel("i18n").getResourceBundle().getText(sKey);
},