我有一个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();
}
};
});
从具有控制器定义的视图插入片段。类似的格式化工作正在视图中使用。但同样不适用于片段。
答案 0 :(得分:1)
在调用片段时在函数中使用“ this”属性,默认情况下它将采用父视图格式化程序:
var oFragment = sap.ui.xmlfragment(“ YourFragment.xml”,this);
答案 1 :(得分:0)
如何实例化片段?以编程方式(例如,调用sap.ui.xmlfragment(...))?然后将View控制器作为片段的附加参数 - 默认情况下它无权访问View控制器,因此无法找到格式化程序功能。
答案 2 :(得分:0)
如果你想保持你的片段独立(不依赖于控制器),这种方法对我有用:
在某些文件中定义格式化程序如下:
jQuery.sap.declare("yourApp.fragment.someModel.Formatter"); yourApp.fragment.someModel.Formatter = { trim: function(sStr) { return str && sStr.trim(); }};
现在您可以通过这种方式使用它:
<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();
}
} });