样式绑定不支持!important。一种选择是改用css 绑定并使用实际的css 类。
另一种选择是使用自定义绑定。从 Knockout 3.3 开始,样式绑定就是这样应用样式的。
ko.bindingHandlers['style'] = {
'update': function (element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor() || {});
ko.utils.objectForEach(value, function(styleName, styleValue) {
styleValue = ko.utils.unwrapObservable(styleValue);
if (styleValue === null || styleValue === undefined || styleValue === false) {
// Empty string removes the value, whereas null/undefined have no effect
styleValue = "";
}
element.style[styleName] = styleValue;
});
}
};
关键部分是element.style[styleName] = styleValue;。
这种设置样式的方法不支持!important。改用setProperty 可以让您将其设为“重要”,但请注意这仅适用于 IE9+。
element.style.setProperty('background', '#F7C7D4', 'important');
以下是该绑定的示例。
ko.bindingHandlers.myCustomStyleBinding = {
update: function (element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor() || {});
ko.utils.objectForEach(value, function(styleName, styleValue) {
var isImportant = false;
styleValue = ko.utils.unwrapObservable(styleValue);
if (styleValue === null || styleValue === undefined || styleValue === false) {
// Empty string removes the value, whereas null/undefined have no effect
styleValue = "";
}
isImportant = styleValue.indexOf('!important') > -1;
styleValue = styleValue.split(' !important')[0];
element.style.setProperty(styleName, styleValue, isImportant ? 'important' : '');
});
}
};