我目前有两个 Knockout 扩展功能。一个向 Observable 添加一个成员,而另一个拦截读取和写入操作。
组合扩展方法时,应用程序的顺序会产生不良影响。
下面的简化代码示例。
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;
};
在数字方法中,我可以检查格式化成员并将其分配给新计算的成员,但我不想让它知道其他方法。如果我决定从 observable 或扩展中添加更多成员,这也将无法维护。
if(target.hasOwnProperty("formatted")){
result.formatted = target.formatted;
}
这是一个没有 hasOwnProperty 修复的小提琴。 http://jsfiddle.net/gs5JM/2/
请注意 MyValue4 - Format: 由于扩展程序应用程序的顺序和格式化成员的丢失,因此为空白。
是否有更好的模式来实现相同的最终结果并使代码更灵活?