Округление числа Додзе И десятичные разряды для NumberTextBox / NumberSpinner

Я хотел бы, чтобы NumberSpinner и / или NumberTextBox могли выполнять две вещи:

  1. Показать значение с точностью до 1 десятичного знака.
  2. Округлите эти значения до .5

Я также хотел бы, чтобы округление происходило при наборе текста или как минимум, когда текстовое поле теряет фокус. Если я попытаюсь напечатать 5.2 это будет округлять до 5.0, Если я наберу 6.345 это будет округлять до 6.5,

Я пытался дикую смесь значений, используя places, pattern а также round свойства как на constraints и / или editOptions объекты. Ничего не работает

Заметки:

  • Что касается NumberSpinner, который я установил smallDelta в 0.5 и он будет увеличивать свойство при использовании стрелок.
  • Из того, что я понимаю places свойство переопределит любой pattern свойство, которое вы установили.
  • Я еще не дошел до работы.
  • Согласно исходной документации для dojo/number Я должен быть в состоянии использовать шаблон, основанный на этих руководящих принципах, чтобы округлить с. Я пробовал разные версии #.50## без успеха. Похоже добавить 50 до расчетного значения без округления. Может я не понимаю?
  • Я вижу дефолт editOptionspattern значение #.##### но когда текстовое поле теряет фокус, оно округляется до трех знаков после запятой. Так что-то еще перекрывает этот паттерн?
  • Копаясь в коде 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 (в основном, просто функцию "разбора"), выполнив некоторую предварительную обработку. Я знаю, что это не то, что вы хотели сделать, но, глядя на билеты в додзё, я не думаю, что было много движения по всему фронту округления додзё.

Другие вопросы по тегам