2017-01-24 7 views
0

У меня есть StepInput, как указано ниже. Идея состоит в том, что шаг - один пенни, а минимальный интервал - 0,01. Когда в качестве начального значения 0,01, когда я нажимаю кнопку +, значение, отображаемое в элементе управления, переходит в 0.0, и элемент управления заблокирован.Формат валюты StepInput

То, что я наблюдал, составляет 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"); 
 

 
});
<!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> 
 
    \t <layout:rows> 
 
     \t <layout:MatrixLayoutRow> 
 
     \t <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" 
 
        /> 
 

 
     \t </layout:MatrixLayoutCell> 
 
     </layout:MatrixLayoutRow> 
 
     </layout:rows> 
 
    </layout:MatrixLayout> 
 
    
 
        
 

 
    </mvc:View> 
 
</script> 
 

 
<body class="sapUiBody"> 
 
    <div id="content"></div> 
 
</body>

ответ

1

Этот номер issue был опубликован на сайте GitHub и был отнесен к категории багов. Он также будет исправлен в UI5. Однако предоставленное обходное решение недостаточно для вашего случая, так как рекомендуется использовать только одно десятичное место для времени. Я бы предложил переопределить поведение по умолчанию на данный момент. Вы можете сделать это без изменения оригинала, как показано в example.

Пример заменяет следующую строку:

vValuePlusStep.toFixed(1) 

со следующими один, который принимает десятичный атрибута значения во внимание.

var decimals = vValuePlusStep.toString().split("."); 
return vValuePlusStep.toFixed(decimals[1].length); 

Вы можете поместить код в отдельный файл, поместите его в директорию приложения и загрузить его в главном компоненте с помощью sap.ui.define. Давайте предположим, что ваше приложение под «приложение», и вы имя файла override.js вы можете загрузить его с:

sap.ui.define(["app/override"], function() { }); 

Не требуется, чтобы передать его в функцию фабрики.

+0

Thanks Mat. Я закладовал список проблем github и буду проверять его в будущем в рамках моих исследований. Пример работает так, как мне нужно. Я хотел бы взять часть переопределения и поместить во внешний файл, чтобы я мог оставить его отделенным от моего основного кода, поскольку он в конечном итоге станет лишним - при условии, что произойдет официальное исправление ошибки. Не могли бы вы предложить, где я должен припарковать его, чтобы сохранить чистоту разделения? –

+1

Добро пожаловать. Я соответствующим образом обновил ответ. – matbtt

+0

Еще раз спасибо. Последний вопрос - что это было в том, что редактирование в вас отвечает, когда вы удалили упоминание о OPENUI5, чтобы получить исправление? –

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.

+0

Спасибо за усилие Яро. Я буду держать вопрос открытым на некоторое время, если у кого-нибудь есть обходной путь. Кажется непонятным, что StepInput не поддерживает валюту. –

+1

Добро пожаловать в VW. Возможно, можно использовать форматировщик, каким-то образом связанным с событием изменения. – Jaro

+0

Итак, что, поймать изменение, сравнить новое значение со старым (кэшированным) значением и использовать его для определения направления приращения (+/i) и сбросить значение до предполагаемого приращения? Если событие изменения не дает указания на нажатие кнопки vs ручного ввода пользователем, у нас может возникнуть проблема. И мы по-прежнему остаемся с проблемой фактического отображения 2dp (или 4dp, если требуется валюта) –