我目前正在设计一个浏览器内计算器,我想要的功能是创建一个输入框,并将其绑定到视图模型中的一个对象。
该对象将有一个名为 value 的属性,这将是输入框显示的内容,但我也希望它具有最小和最大限制,如果超过它们,它们会将框的背景颜色更改为红色。
我得到了基本的输入绑定工作,但是我在为输入绑定创建自己的自定义绑定包装器时遇到了麻烦,这也会改变背景颜色。
我的 HTML:
<td><input data-bind="calcVar: resistance" type="text" size="16" /></td>
我的Javascript:
保存所有数据的“类”
var calcVar = function(value, lowerBound, upperBound) {
this.value = ko.observable(value);
this.lowerBound = ko.observable(lowerBound);
this.upperBound = ko.observable(upperBound);
};
在视图模型中创建变量:
this.fSwAct = ko.observable(new calcVar(200, 100, 100, 0, 1000));
启动功能
// Start-up function
j(document).ready(
function StartUp()
{
// Create custom binding
ko.bindingHandlers.calcVar = {
init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
ko.bindingHandlers.value.init(element, valueAccessor()().value, allBindings, viewModel, bindingContext);
},
update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
// Call value binding (child binding)
ko.bindingHandlers.value.update(element, valueAccessor()().value, allBindings, viewModel, bindingContext);
}
};
// Activates knockout.js
var app = new AppViewModel();
ko.applyBindings(app);
}
);
尽管正在调用自定义绑定函数,但输入绑定似乎不起作用,并且当值更改时其他计算字段不会更新。我觉得这与我创建 calcVar “类”或将其传递给输入绑定的方式有关。