Стиль привязки нокаутом: firefox не устанавливает фоновый цвет?
Когда я пытаюсь изменить цвет фона маленькой коробки, используя привязку style
knockout.js:
<input class="biggerBox" type="text" data-bind="value: colorText, valueUpdate: 'afterkeydown'" />
<div class="littleBox" data-bind="style: {'background-color': colorText}"></div>
и в js:
var viewModel = {
colorText: ko.observable('rgba( 80, 120, 160, 1)')
};
ko.applyBindings(viewModel);
он работает так же, как я ожидаю в Chrome и Safari, цвет фона маленькой коробки меняется при вводе текста в поле ввода. Но не в Firefox 24.0 на Mac; наблюдаемые изменения colorText, но цвет фона никогда не устанавливается. Однако, если я попытаюсь изменить цвет переднего плана, это работает во всех браузерах Chrome, Safari и Firefox. Я не пробовал IE.
Неужели я не понимаю здесь программирования? Или это ошибка knockout.js? Или ошибка Firefox? Это не похоже на Как использовать привязки данных стиля?
jsfiddle здесь
Ответы
Ответ 1
Вместо background-color
вы должны использовать атрибут backgroundColor
.
Live Демо.
Это не нокаут-специфическая вещь. Как видно из соответствующего файла исходного кода KO, привязка устанавливает стиль следующим образом:
element.style[styleName] = styleValue || "";
Firefox обрабатывает этот синтаксис element.style[...]
, отличный от Chrome, как можно видеть, если вы наберете следующее в обоих консольных окнах:
document.body.style['background-color'] = 'red'
Это работает в Chrome, а не в Firefox. (Интересно, что он также работает в IE11.)
Ответ 2
Использование альтернативного синтаксиса для определения имен классов CSS работает в Firefox:
<div class="littleBox" data-bind="style: {backgroundColor: colorText}"></div>
Чтобы узнать причину, вам понадобится исходный код.