我有一个StepInput定义如下。这个想法是步骤是一分钱,最小范围是0.01。当0.01为初始值时,当我单击+按钮时,控件中显示的值变为0.0并且控件被锁定。
我所看到的是0.01 +步骤0.01变为0.02。
我做错了什么?
<StepInput
id="unitcost"
value="0.01"
min="0.01"
max="999.99"
step=".01"
largerStep="0.5"
width="10em"
enabled="true"
editable="true"
/>
通过运行此剪辑来查看它。
sap.ui.getCore().attachInit(function() {
"use strict";
sap.ui.controller("MyController", {
onInit: function() {
}
});
sap.ui.xmlview({
viewContent: jQuery("#myView").html()
}).placeAt("content");
});
&#13;
<!DOCTYPE html>
<title>SAPUI5</title>
<script src="https://sapui5.hana.ondemand.com/resources/sap-ui-core.js" id="sap-ui-bootstrap" data-sap-ui-theme="sap_bluecrystal" data-sap-ui-libs="sap.m" data-sap-ui-bindingSyntax="complex" data-sap-ui-compatVersion="edge" data-sap-ui-preload="async"></script>
<script id="myView" type="ui5/xmlview">
<mvc:View controllerName="MyController" xmlns="sap.m" xmlns:core="sap.ui.core" xmlns:mvc="sap.ui.core.mvc"
xmlns:layout="sap.ui.commons.layout" xmlns:f="sap.ui.layout.form">
<layout:MatrixLayout>
<layout:rows>
<layout:MatrixLayoutRow>
<layout:MatrixLayoutCell backgroundDesign="Fill1" padding="None">
<StepInput
id="unitcost"
value="0.01"
min="0.01"
max="999.99"
step=".01"
largerStep="0.5"
width="10em"
enabled="true"
editable="true"
/>
</layout:MatrixLayoutCell>
</layout:MatrixLayoutRow>
</layout:rows>
</layout:MatrixLayout>
</mvc:View>
</script>
<body class="sapUiBody">
<div id="content"></div>
</body>
&#13;
答案 0 :(得分:1)
我测试了sap.m.StepInput,并且不可能使用小于0.1的步长。否则,将向上或向下舍入步骤。
0.54 will be rounded down to 0.5
0.56 will be rounded up to 0.6
请查看jsbin example。
因此0.01向下舍入为0.
EDITED 2:32 240117:
这是简单的jsbin + counter。
答案 1 :(得分:1)
此issue已在GitHub上报告,并已被归类为错误。它也将在UI5中修复。但是,所提供的解决方法对于您的情况是不够的,因为建议在时间上仅使用一个小数位。我建议暂时覆盖默认行为。您可以在不更改原件的情况下执行此操作,如example。
所示该示例替换以下行:
vValuePlusStep.toFixed(1)
使用以下值,将value属性的小数考虑在内。
var decimals = vValuePlusStep.toString().split(".");
return vValuePlusStep.toFixed(decimals[1].length);
您可以将代码放在单独的文件中,将其放入app目录并使用sap.ui.define将其加载到主组件中。让我们假设您的应用程序位于&#34; app&#34;并命名文件override.js,您可以使用以下命令加载它:
sap.ui.define(["app/override"], function() { });
不需要将其传递给工厂函数。