Округление числа Додзе И десятичные разряды для NumberTextBox / NumberSpinner
Я хотел бы, чтобы NumberSpinner и / или NumberTextBox могли выполнять две вещи:
- Показать значение с точностью до 1 десятичного знака.
- Округлите эти значения до .5
Я также хотел бы, чтобы округление происходило при наборе текста или как минимум, когда текстовое поле теряет фокус. Если я попытаюсь напечатать 5.2
это будет округлять до 5.0
, Если я наберу 6.345
это будет округлять до 6.5
,
Я пытался дикую смесь значений, используя places
, pattern
а также round
свойства как на constraints
и / или editOptions
объекты. Ничего не работает
Заметки:
- Что касается NumberSpinner, который я установил
smallDelta
в0.5
и он будет увеличивать свойство при использовании стрелок. - Из того, что я понимаю
places
свойство переопределит любойpattern
свойство, которое вы установили. - Я еще не дошел до работы.
- Согласно исходной документации для
dojo/number
Я должен быть в состоянии использовать шаблон, основанный на этих руководящих принципах, чтобы округлить с. Я пробовал разные версии#.50##
без успеха. Похоже добавить50
до расчетного значения без округления. Может я не понимаю? - Я вижу дефолт
editOptions
pattern
значение#.#####
но когда текстовое поле теряет фокус, оно округляется до трех знаков после запятой. Так что-то еще перекрывает этот паттерн? - Копаясь в коде Dijit, он выглядит как
round()
методdojo/number
не передаетсяincrement
параметр вNumberTextBox.js
вfilter()
метод. Итак, постановкаround
как свойство одного из двух конфиг объектов выше ничего не делает?
Вот базовый jsFiddle, использующий NumberSpinner, который пытается выполнить некоторое округление и десятичную точность.
Одна из моих попыток:
<input
id="test"
type="text"
data-dojo-type="dijit/form/NumberSpinner"
data-dojo-props="
value: 5,
smallDelta: 0.5,
constraints: { min: 5, max: 1000, places: 1, round: 5 },
editOptions: {
places: 1
}
">
Я уверен, что я могу обойтись с расширением метода на NumberTextBox
или же NumberSpinner
лайк filter()
через пользовательский миксин, но предпочел бы сделать это через параметры конфигурации на data-dojo-props
если вообще возможно.
Как и во многих додзё, что-то не так очевидно и не так просто, как кажется, особенно с Dijits. О некоторых Dijits просто не так много информации, и документация любит замазывать вещи и всегда была огромной слабостью додзё.
Может ли кто-нибудь помочь уточнить это для меня. Я чувствую, что я рядом, и мне нужен кто-то, чтобы указать, что я, скорее всего, упускаю из виду Я просто хотел бы округлить значение до ближайшего .5 и / или отобразить одно десятичное место с округлением.
1 ответ
Я считаю, что округление не рекомендуется в додзё или, по крайней мере, не поддерживается, но им действительно нужно обновить свои руководства. Смотрите здесь. Некоторое время назад я взглянул на это и не смог найти хорошего решения, используя только ограничения или аспект и округляя до / после. Большая проблема заключается в том, что если вы установите "места" равными 1, то однозначный ввод, такой как "7", будет преобразован в NaN, потому что у него нет 1 десятичного знака. В итоге я просто расширил NumberSpinner (в основном, просто функцию "разбора"), выполнив некоторую предварительную обработку. Я знаю, что это не то, что вы хотели сделать, но, глядя на билеты в додзё, я не думаю, что было много движения по всему фронту округления додзё.