現在、2 つの Knockout 拡張機能があります。1 つは Observable にメンバーを追加し、もう 1 つは読み取りおよび書き込み操作をインターセプトします。
拡張メソッドを組み合わせると、アプリケーションの順序が望ましくない影響を及ぼします。
以下の簡略化されたコード例。
ko.extenders.format = function(target) {
var result = ko.computed(function(){
return "$" + target();
});
target.formatted = result;
return target;
};
ko.extenders.numeric = function(target, precision) {
var result = ko.computed({
read: function() {
var current = parseFloat(target());
return current.toFixed(precision);
},
write: function(newValue) {
newValue = parseFloat(newValue);
target(newValue.toFixed(precision));
}
});
return result;
};
数値メソッドでは、フォーマットされたメンバーをチェックして新しい計算に割り当てることができますが、他のメソッドの知識を与えたくありません。オブザーバブルまたは拡張機能からさらにメンバーを追加することにした場合、これも維持できなくなります。
if(target.hasOwnProperty("formatted")){
result.formatted = target.formatted;
}
hasOwnProperty 修正なしのフィドルです。 http://jsfiddle.net/gs5JM/2/
拡張アプリケーションの順序とフォーマットされたメンバーの損失により、MyValue4 - Format: が空白になっていることに注意してください。
同じ最終結果を達成し、コードをより柔軟にするためのより良いパターンはありますか?