#jquery #jquery-mobile #knockout.js
#jquery #jquery-мобильный #knockout.js
Вопрос:
Я пытаюсь передать значение ползунка в span и динамически изменять его. Он работает нормально, но когда я запускаю страницу, кнопка слайдера смещается на неправильное значение. Как я могу это исправить? Это мой HTML
<div data-role="page">
<div data-role="header">
<h1>Slider Control</h1>
</div>
<div data-role="main" class="ui-content">
<label for="points">Points:</label>
<input type="range" data-highlight="true" data-bind="attr: {'id': id, 'min': min, 'max': max}, value: value, valueUpdate: 'input'" />
Net: <span data-bind="text: value"></span>
</div>
Это моя скрипка
Редактировать
Это пример слайдера, где слайдер начинается на своем месте. Скрипка
Ответ №1:
Похоже, что jQuery mobile инициализирует слайдер до того, как knockout установит его значение.
Быстрое и грязное решение: (не рекомендуется) вручную запускать обновление после применения привязок.
ko.applyBindings(viewModel);
$("input").trigger("change");
https://jsfiddle.net/avk9dyw4/
Реальное решение: примените привязки перед инициализацией jquery mobile или создайте пользовательский обработчик привязки, который позаботится о порядке инициализации виджетов и настройке атрибутов.
Комментарии:
1. примените привязки перед инициализацией jquery mobile , вы имеете в виду что-то вроде этого
2.
<input data-bind="attr: {'id': id, 'min': min, 'max': max}, value: value, valueUpdate: 'input'" type="range" data-highlight="true" />
3. Речь идет не о порядке атрибутов, а о порядке, в котором jQuery и knockout выполняют обработку DOM. jQuery mobile использует атрибуты
min
max
иvalue
для отображения пользовательского элемента управления. нокаут устанавливает эти атрибуты при вызовеapplyBindings
. Поэтому, когда jQuery mobile создает пользовательский интерфейс до того, как у knockout появилась возможность установить атрибуты, он еще не может знать значение и отображает виджет по умолчанию.