SAPUI5格式化程序无法在片段内工作

时间:2015-12-01 21:08:59

标签: xml sapui5

我有一个XML片段,我需要使用格式化程序。但片段无法识别格式化程序

<core:FragmentDefinition xmlns:core="sap.ui.core" xmlns="sap.m" xmlns:f="sap.ui.layout.form" xmlns:l="sap.ui.layout" xmlns:mvc="sap.ui.core.mvc" controllerName="dol.ui.model.formatter">
    <l:Grid defaultSpan="L12 M12 S12" width="auto">
        <l:content>
            <f:SimpleForm title="Section 1" columnsL="2" columnsM="2" editable="false" emptySpanL="0" emptySpanM="0" labelSpanL="4" labelSpanM="4" layout="ResponsiveGridLayout" maxContainerCols="2" minWidth="1024">
                <f:content>
                    <core:Title text="Sub Section 1.1" />
                    <Label text="G/L Account" />
                    <Text text="{path: 'GLACC', formatter: '.formatter.removeLeadingZeros'}" />
                </f:content>
            </f:SimpleForm>
        </l:content>
    </l:Grid>
</core:FragmentDefinition>

格式化程序是

sap.ui.define([], function() {
    "use strict";
    return {
        removeLeadingZeros: function(sString) {
            console.log(Number(sString).toString());
            return Number(sString).toString();

        }
    };
});

从具有控制器定义的视图插入片段。类似的格式化工作正在视图中使用。但同样不适用于片段。

4 个答案:

答案 0 :(得分:1)

在调用片段时在函数中使用“ this”属性,默认情况下它将采用父视图格式化程序:

var oFragment = sap.ui.xmlfragment(“ YourFragment.xml”,this);

答案 1 :(得分:0)

如何实例化片段?以编程方式(例如,调用sap.ui.xmlfragment(...))?然后将View控制器作为片段的附加参数 - 默认情况下它无权访问View控制器,因此无法找到格式化程序功能。

答案 2 :(得分:0)

如果你想保持你的片段独立(不依赖于控制器),这种方法对我有用:

  1. 在某些文件中定义格式化程序如下:

    jQuery.sap.declare("yourApp.fragment.someModel.Formatter");
    
    yourApp.fragment.someModel.Formatter = {
        trim: function(sStr) {
            return str && sStr.trim();
        }};
    
    
  2. 现在您可以通过这种方式使用它:

    <Text text="{path: 'GLACC', formatter:'yourApp.fragment.someModel.Formatter.trim'}" />
    

答案 3 :(得分:0)

如果您在控制器中像下面这样写,它将识别格式器

sap.ui.define([
//formatter path to call formatter.js file. see example below
"path/models/formatter",
], function(formatter){
    "use strict";
    return {
formatter: formatter,

    };
});

在要放置的formatter.js文件中定义格式化程序功能

removeLeadingZeros: function(sString) {
                console.log(Number(sString).toString());
                return Number(sString).toString();

            }

请参阅前。用于formatter.js文件

sap.ui.define([], function() {
    "use strict";

    return {
removeLeadingZeros: function(sString) {
                    console.log(Number(sString).toString());
                    return Number(sString).toString();

                }

} });