ノックアウト js を使用してこれを行う最もエレガントな方法を考えようとしています。
3 つの値を合計する必要があるとしますが、結果の合計も編集できます...ノックアウト js を使用してこれを行うにはどうすればよいでしょうか?
ユーザーが合計値を編集したときに合計を構成する値を無効にし、合計フィールドが空白の場合はそれらを再度有効にする設定に沿って考えていました。
出発点として、この jsfiddle を参照してください: http://jsfiddle.net/faHHB/
計算されたオブザーバブルを使用して文字列を分解する同様の例は、ノックアウトのドキュメントにあります。
function MyViewModel() {
this.firstName = ko.observable('Planet');
this.lastName = ko.observable('Earth');
this.fullName = ko.computed({
read: function () {
return this.firstName() + " " + this.lastName();
},
write: function (value) {
var lastSpacePos = value.lastIndexOf(" ");
if (lastSpacePos > 0) { // Ignore values with no space character
this.firstName(value.substring(0, lastSpacePos)); // Update "firstName"
this.lastName(value.substring(lastSpacePos + 1)); // Update "lastName"
}
},
owner: this
});
}
ko.applyBindings(new MyViewModel());
編集 より明確にするために、この状況をどのように表現するのが最善かわかりません:
3 つのフィールドが家の価値、車の価値、退職貯蓄の価値を表し、合計が資産の合計価値を表しているとします。
すべてのフィールドは編集可能である必要があり、ユーザーが 3 つの値を入力すると、合計値が計算されます。合計値は直接編集することもできます (ユーザーがリストにない他の貯蓄を持っている場合)。これを表現する最良の方法がわかりません...
ユーザーが合計を編集するとき、私が考えることができるオプションは次のとおりです。
- 合計を 3 で割り、他の値を設定します
- 入力値をグレー表示し、合計値が空白の場合にのみユーザーが値を変更できるようにします。
- 計算というラベルの付いたチェックボックスを用意します。これは、チェックを入れると値を合計し、チェックを外すとユーザーが編集できるようにします。
この状況を表現する最善の方法と、ノックアウトを使用してそれを実装する方法を尋ねようとしていました。わかりにくかったらすみません。
今のところ、アプローチ 3 に落ち着きました: jsfiddle.net/faHHB/10