将控件的ID传递给Formatter函数

时间:2017-02-15 19:31:34

标签: sapui5

我需要将控件的ID传递给格式化程序。这是我的控制定义:

<Text id="controlId" text="{parts:[{path: 'details>/key1'},{path: 'details>/key2'}], formatter: '.userFormatter._formatField'}"/>

格式化程序在另一个文件中定义:

sap.ui.define(
function(){
    "use strict";
    return {

            _formatField: function(sText1, sText2){
                console.log("this ---> ",this);
                return sText1 + " - " + sText2;
            }
}

相关控制器中的格式化程序定义:

sap.ui.define([
    "My/Namespace/controller/BaseController",
    "My/Namespace/common/userFieldsFormatter"
], function(BaseController, userFormatter) {
    "use strict";
    return BaseController.extend("My.Namespace.controller.Detail", {
        userFormatter: userFormatter
});

在控制台中,我看到控制器对象(试图对类似问题实施THIS解决方案 - 不起作用)。

1 个答案:

答案 0 :(得分:1)

如果您希望将格式化程序功能保留在控制器中(并且 this 的值等于您的UI5控件),您可以在绑定中引用格式化程序,如下所示......

<Text id="controlId" text="{parts:[{path: 'details>/key1'},{path: 'details>/key2'}], formatter: 'My.Namespace.controller.Detail.prototype.userFormatter._formatField'}"/>

...否则您应该能够使用单独的格式化程序功能文件,但需要使用jQuery.sap.require

使用语法.formatterFuncName在绑定中指定的控制器上的任何格式化程序都将使用&#39; this&#39; object作为控制器本身的实例,所有其他场景&#39; this&#39;将是UI5控件的实例

你可以看一下this example,希望能让事情变得更清晰