私は現在、ブラウザー内の電卓を設計しています。必要な機能は、入力ボックスを作成し、それをビューモデルのオブジェクトにバインドすることです。
このオブジェクトには 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「クラス」を作成する方法、またはそれを入力バインディングに渡す方法に関係があると感じています。