起初我的回答是否定的,这是不可能的。但经过一番研究,我发现这是完全可能的。
在这里使用这个问题的精彩答案:knockoutjs overriding bindinghandlers您可以覆盖值绑定的行为,并添加所需的必要行为。
var originalInit = ko.bindingHandlers.value.init,
originalUpdate = ko.bindingHandlers.value.update;
ko.bindingHandlers.value= {
init: originalInit,
update: function(element, valueAccessor, allBindingsAccessor, viewModel) {
var $element = $(element);
var value = ko.utils.unwrapObservable(valueAccessor());
// only apply to inputs, and if value is a number and is greater than 0
if ($element.prop("tagName").toLowerCase() == "input" && !isNaN(value) && value > 0) {
$element.addClass('positive-integer');
}
else {
// otherwise ensure the class is removed
$element.removeClass('positive-integer');
}
// call the original update function
originalUpdate(element, valueAccessor, allBindingsAccessor, viewModel);
}
};
此代码将在常规value:
绑定代码之前运行,并更新您的元素类(需要 jQuery,但这只是因为我很懒 - 如果需要,应该很容易转换)。
完整的 JS 小提琴可在此处获得:http: //jsfiddle.net/sp3uF/