如何在将模型用作控件属性之前格式化模型中的值?

时间:2015-07-22 06:44:06

标签: sapui5

var oModel = new sap.ui.model.json.JSONModel();
var modelData = {
  greet: "hello"
};
oModel.setData(modelData);
			
var oTextView = new sap.ui.commons.TextView({
  text: "{/greet}" + "?" // "{/greet}" interpreted as ordinary string in this case
});
oTextView.setModel(oModel);
oTextView.placeAt("content");

为了简化问题,我的问题可以简化如下: 我想在TextView的文本上添加一个问号。但是,文本的主要部分来自模型。实际上,在这个简单的例子中,我可以在与问号结合之前从模型中访问文本。生成目标字符串后,我可以将其分配给TextView的text属性。但是,如果模型在其他地方发生变化怎么办?访问text属性的代码将无法保证执行,因此TextView的文本不会更新? 有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:3)

您可以使用复杂的绑定语法。只需将其添加到您的引导程序中:

data-sap-ui-xx-bindingSyntax="complex"

这使您可以将模型值与静态文本值组合,如下所示:

var oTextView = new sap.ui.commons.TextView({
    text: "{/greet} ?"
});

甚至是这样的:

var oTextView = new sap.ui.commons.TextView({
    text: "{/lastName}, {/firstName}"
});

如果静态文本部分取决于模型值,则可以添加格式化程序功能,例如:

var oTextView = new sap.ui.commons.TextView({
    text: {
            path : "/greet", // no curly braces here!
            formatter : function(greet) {
                if(greet === "hello") {
                    return greet + "!";
                } else if (greet === "how are you") {
                    return greet + "?";
                } else {
                    return greet;                     
                }
            }
});