ノックアウトの foreach バインディングを使用して、数量入力フィールドを持つ在庫品目のリストを生成しています。ユーザーが数量を変更すると、新しい値をサーバーに投稿したいと思います。
解決策を思いつきましたが、ベスト ノックアウト プラクティスを使用しているかどうかについてのフィードバックに関心があります。
私は2つのビューモデルを使用しています。1 つは在庫を表し、個々の在庫品目の観察可能な配列にすぎません。
var inventory = function(lineItems) {
var self = this;
self.items = ko.observableArray(lineItems);
};
2 つ目は在庫品目を表します。
var lineItem = function(id, text, quantity, quantityChangedCallback) {
var self = this;
self.id = ko.observable(id);
self.itemName = ko.observable(text);
self.quantity = ko.observable(quantity);
self.quantity.subscribe(function() {
quantityChangedCallback(self);
});
};
HTML は次のとおりです。
<ul data-bind="foreach: items">
<li>
<span data-bind="text: itemName"></span>:
<input class="invLineItem" data-bind="value: quantity"/>
</li>
</ul>
私のjavascriptの残りの部分:
var lineItemArray = [
new lineItem(1, 'Item 01', 0, onQuantityChanged),
new lineItem(2, 'Item 02', 0, onQuantityChanged),
new lineItem(3, 'Item 03', 2, onQuantityChanged)
];
ko.applyBindings(new inventory(lineItemArray));
function onQuantityChanged(item) {
alert("Post change to server: " + ko.toJSON(item));
}
私の質問は、
1) subscribe の使用は、数量が変更されたときに通知を受け取るための良い方法ですか? うまく機能しているようで、対応する数量入力要素のフォーカスが失われ、その値が変更されたときにのみ呼び出されます。これはまさに私が欲しいものです。
2) コールバック アプローチはどうですか? これはあまり正しくない部分ですが、追加のロジックを適用してポストを行うために、アイテムのビュー モデルから抜け出すために思いついた最もクリーンな方法でした。
ここにフィドルがあります:http://jsfiddle.net/kenswdev/YHHSu/7/
提案をお寄せいただきありがとうございます。