为什么控制器中的格式化程序不起作用?

时间:2016-05-24 06:02:43

标签: sapui5

我已经定义了一个新的自定义模块:

状态应用内/ formatter.js

sap.ui.define([], function() {
    "use strict";
    return {
        stringToInt: function(value) {
            console.log("Called: " + value);
            return parseInt(value);
        }
    }
});

然后在我的控制器中,我将其定义为依赖于演练的Step 23中的依赖项,并添加为控制器属性。

sap.ui.define([
    "sap/ui/core/mvc/Controller",
    "status-app/formatter"
], function (Controller, formatter) {
    "use strict";

    return Controller.extend("stibam-status.Main", {

        //formatter: formatter, 

        formatter: {
            stringToInt: function(value) {
                console.log(value);
                return "";
            }
        },

    [...]
});

我已尝试过两种代码变体,但未调用格式化程序。我在onInit-function this.formatter中打印但是设置正确。为什么我的视图只在我在视图中使用匿名函数时才调用我的格式化程序?

不工作

oColListItem.addCell((new sap.m.Text()).bindText({ 
    path: "statusData>AnzPdf", 
    formatter: ".formatter.stringToInt"
}));

工作

oColListItem.addCell((new sap.m.Text()).bindText({ 
    path: "statusData>AnzPdf", 
    formatter: function(value) {
        console.log(value); 
        return parseInt(value);
    }
}));

2 个答案:

答案 0 :(得分:1)

您为bindText()方法expects a function提供的属性formatter的绑定信息。它应该是这样的:

Controller内:

oColListItem.addCell((new sap.m.Text()).bindText({ 
    path: "statusData>AnzPdf", 
    formatter: this.formatter.stringToInt
}));

JSView内:

createContent: function(oController){
    //...
    oColListItem.addCell((new sap.m.Text()).bindText({ 
        path: "statusData>AnzPdf", 
        formatter: oController.formatter.stringToInt
    }));
    //...
}

您引用的演练使用了XMLViews。在XMLView中,XMLTemplateProcessor从属性值(普通字符串)中解析绑定信息。它解析了Controller View上的“.formatter”等值。

当您在JSView中使用Control或创建Controller时,您可以直接提供BindingInfo对象。不涉及字符串解析。

答案 1 :(得分:0)

我用这段代码解决了这个问题。

return Controller.extend("convanl.ConvAnualDesemp.controller.View1", {
formatter: formatter,

----------------------------
    var oTemplate = new sap.m.ColumnListItem({
                        cells: [
                               new sap.m.Text().bindText({
                               path: "Rut", 
                               formatter: that.formatter.entregaRutFormateado}),
                               new sap.m.Text({
                                text: "{DescEstado}"
                            })]});