我想用两个参数调用函数getCountdown
:
"Time"
或"Status"
中进行硬编码。这是我的代码:
<ObjectStatus
title="Time"
text="{
parts: [
{path: 'AuctionEnd'},
{path: 'Time'}
],
formatter: '.formatter.getCountdown'
}"
/>
在formatter.js中,我的控制台日志中只有第一个参数:
["2016-05-20T12:00:00", undefined]
在JS中,我会这样做:
var AuctionEnd = "2016-05-20T12:00:00";
getCountdown(AuctionEnd, "Time");
答案 0 :(得分:4)
从1.61 [commit] 开始,您可以将静态值添加到绑定信息对象。语法为value
,而不是path
。
parts: [
{path: '/modelPath'},
{value: 123}
],
...
与path
一样,您可以通过更多设置来增强value
绑定信息,如本演示所示:https://jsbin.com/yeguhow/edit?js,output
答案 1 :(得分:1)
要将静态值传递给格式化程序,可以使用不带翻译的i18n模型(因为如果您查找i18n.prop中不存在的属性,它将返回您要查找的关键字):
我试图将'X,,X'表示为复选框列表:
midiInOpen()
在这种情况下,当我重新确认自己甚至不需要格式化程序时,我便采用了不同的方法:
// will format the first of values boolvalues.split(',')[index]
selected="{parts: [ 'modelName>/boolvalues', 'i18n>0'], formatter: '.formatter.checkBoxFormatter'}"
答案 2 :(得分:1)
版本<1.61的解决方案:
注册模型以使用init方法查看
onInit: function() { // JSONModel required from "sap/ui/model/json/JSONModel"
var oModelConstants = new JSONModel(Object.freeze({ myConstant: 123 }));
oModelConstants.setDefaultBindingMode("OneTime");
this.getView().setModel(oModelConstants, "constants");
}
在XML视图中,为格式化程序分配以下部分:
<ObjectStatus text="{
parts: [
'AuctionEnd',
'constants>/myConstant'
],
formatter: '.formatter.getCountdownTime'
}" />
对于1.61及更高版本,请参见answer 53609552。
答案 3 :(得分:1)
我发现了另一种可能性,也许不是完全针对该问题的用例,但这是我发现此问题时要寻找的东西。
如果您要设置的“常量”或“静态”文本是实际的可翻译文本,则可以在i18n模型中对其进行定义,然后按以下方式进行访问:
<ObjectStatus
title="Time"
text="{
parts: [
{path: 'AuctionEnd'},
{path: 'i18n>/Time'}
],
formatter: '.formatter.getCountdown'
}"
/>
也许更合适的用例是设置表列的标题,并从模型到末尾添加一个单位,例如:“ Space [m ^ 2]”。由于无论如何都必须翻译“空间”,因此您可以直接从模型中拉出它。
答案 4 :(得分:0)
据我所知,您无法向格式化程序添加静态部分,它只能获取模型值。有关属性中动态和静态部分的组合,请参阅Expression Binding和Complex Binding Syntax。
对于您的情况,您可以添加两个更专业的格式化程序函数并调用您需要的函数:
<ObjectStatus text="{parts: ['AuctionEnd'], formatter: '.formatter.getCountdownTime'}" />
(您可以在部分数组中提供路径 - 字符串数组。)
formatter.getCountdownTime = function (auctionEnd) {
return formatter.getCountdown(auctionEnd, "Time");
}
formatter.getCountdownStatus = function (auctionEnd) {
return formatter.getCountdown(auctionEnd, "Status");
}
答案 5 :(得分:0)
我认为@hirse方面是正确的,而不能将静态部分添加到格式化程序中。
我建议您将静态值放入> / countdownType之类的ViewModel-Property中。然后,在绑定objectstatus-text之前(也在您的控制器中)在控制器中设置此属性。对于这种方法,您必须给您的ObjectStatus一个ID。然后,您可以将属性文本与格式化程序绑定。
您的格式化程序看起来像这样:
getCountdown: function(auctionEnd){
var sType = this.getView().getModel("<yourviewmodelname>").getProperty("/countdownType");
//whatever you want to do
}
您的控制器是这样的:
var sType = "<yourLogicToDefineEitherTimeOrStatus>";
this.getView().getModel("<yourviewmodelname>").setProperty("/countdownType", sType);
var oObjectStatus = this.getView().byId("<yourNewImplementedObjectStatusId>");
oObjectStatus.bindProperty("text", {
path: "AuctionEnd",
formatter: this.formatter.getCountdown.bind(this)
});
希望这会有所帮助。
关于, 迈克