Почему индикатор выполнения отображает значение с плавающей запятой? - PullRequest
1 голос
/ 23 августа 2011

'value' в этом примере - 5, maxValue - 39. Значение, отображаемое на индикаторе выполнения (a wijmo progressbar ) - 5.07. {0} должен указывать индикатору выполнения отображать значение прогресса, а не процент. Если я изменю значение на 8, поддерживая максимальное значение равным 39, отображаемое значение становится 8,19. Я немного сбит с толку относительно того, почему я вижу числа с плавающей запятой, а не целые числа. Я не вижу ничего в коде ProgressBar, который отображал бы что-либо, кроме self.value (), который регистрирует консоль как целое число. Так что может быть причиной такого поведения?

$("#proBarAdherence").wijprogressbar({

  value: Gymloop.completedCount,
  animationOptions: {
    duration: 1000
  },

  maxValue: Gymloop.targetSessions,
  indicatorImage: '/images/progbar_red.png',
  labelAlign: 'running',
  labelFormatString: '{0} sessions completed',
  beforeProgressChanging: function(e,data) {
    console.log('beforeprogresschanging',data);
  },
  progressChanging: function (e,data) {
    console.log('progresschanging',data);

  },
  progressChanged : function (e,data) {
    console.log('progresschanged',data);
  }
});

beforeprogresschanging Object { oldValue="5", newValue=5}
progresschanging Object { oldValue="5", newValue=0}
progresschanging Object { oldValue="0", newValue=1.17}
progresschanging Object { oldValue="1.17", newValue=1.56}
progresschanging Object { oldValue="1.56", newValue=1.95}
progresschanging Object { oldValue="1.95", newValue=2.34}
progresschanging Object { oldValue="2.34", newValue=2.73}
progresschanging Object { oldValue="2.73", newValue=3.12}
progresschanging Object { oldValue="3.12", newValue=3.51}
progresschanging Object { oldValue="3.51", newValue=3.9}
progresschanging Object { oldValue="3.9", newValue=4.29}
progresschanging Object { oldValue="4.29", newValue=4.68}
progresschanging Object { oldValue="4.68", newValue=5.07}
progresschanged Object { oldValue="5", newValue=5}

Обновление

Я могу видеть значения во время события progressChanging, но не уверен, как заставить метку отображать 5 вместо 5.07 после завершения анимации? Вот живой пример здесь

Ответы [ 2 ]

1 голос
/ 23 августа 2011

Вам нужно округлить, если вы хотите отобразить целые числа JavaScript использует плавающие для всего.
Как преобразовать число с плавающей точкой в ​​целое число в JavaScript?

--- Ответ на обновление ---
Я не особенно знаком с этим точнымИндикатор выполнения, но все они похожи.
Что происходит, когда вы инициализируете переменную один раз, когда переменная инициализируется, а не когда переменная обновляется.

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

Я не уверен, что делаю хорошую работу, объясняя, что происходит
value = Math.round (myobj.completedCount), --- событие обновления -> завершеноCount = newValue
--update событие ---> completeCount = newValue
что вам нужно сделать, это перехватить это событие обновления и округлить переменную там.
--- событие обновления -> completeCount = round (newValue)

------ ПОПРОБУЙТЕ ЭТО -------
Проблема заключается в следующем
percent = (value - self.min) / (self.max - self.min) * 100;
замените строку 328 из исходного кода панели wijmo на
percent = Math.round((value - self.min) / (self.max - self.min)) * 100;
, и она должна действовать так, как вы хотите.

0 голосов
/ 25 августа 2011

Я пошел с этим в конце (редактирование файла JS ProgressBar - yuck):

self.label.html(self._getFormatString(
            o.labelFormatString, Math.round(percent), Math.round(curValue)));

Я также зарегистрировал ошибку с разработчиками wijmo.

Другой вариант без редактирования источника:

(function(){
// Store a reference to the original html method.
var originalHtmlMethod = jQuery.fn.html;

// Define overriding method
jQuery.fn.html = function(){

// Execute our override - rounding the value
// being passed to jQuery's html() function
// only when the progressbar label is being
// updated
if ($(this).hasClass('ui-progressbar-label')) {
arguments[0] = Math.round(arguments[0]);
}

// Execute the original jquery method for all other html() calls on the     page
originalHtmlMethod.apply( this, arguments );
}
})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...