Tôi hiện có hai chức năng mở rộng Knockout. Người ta thêm một thành viên vào Observable trong khi người kia chặn các hoạt động đọc và ghi.Mẫu tốt để giữ gìn các thuộc tính tùy chỉnh được tạo trong tiện ích mở rộng Knockout?
Khi kết hợp các phương pháp mở rộng, thứ tự ứng dụng có tác dụng không mong muốn.
Ví dụ mã đơn giản bên dưới.
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;
};
Trong phương pháp số, tôi có thể kiểm tra thành viên được định dạng và gán nó cho tính toán mới nhưng tôi không muốn cho kiến thức về phương pháp khác. Điều này cũng sẽ không thể duy trì nếu tôi quyết định thêm các thành viên khác ngoài quan sát hoặc tiện ích mở rộng.
if(target.hasOwnProperty("formatted")){
result.formatted = target.formatted;
}
Không có sửa lỗi hasOwnProperty. http://jsfiddle.net/gs5JM/2/
Lưu ý rằng MyValue4 - Định dạng: trống do thứ tự của ứng dụng mở rộng và mất thành viên được định dạng.
Có mô hình nào tốt hơn để đạt được cùng kết quả cuối cùng và làm cho mã linh hoạt hơn không?
Cảm ơn bạn đã trả lời. Tôi đã không biết rằng một ko.computed vô danh sẽ làm việc theo cách đó, nhưng nó có ý nghĩa. –
Điều này làm việc tuyệt vời cho các quan sát và các trường được tính toán bằng một phương thức ghi, nhưng không thành công khi nó được tính toán chỉ với một phương thức đọc. Trong bộ mở rộng số ban đầu, tôi đã bao gồm cả chức năng đọc và ghi để tôi có thể sử dụng nó trong cả hai kịch bản. Bạn có gợi ý nếu nó không thể ghi được không? –
Nó sẽ là kịch bản rất lạ khi bạn cần một extender để viết vào các quan sát chỉ đọc. Bạn có thể giải thích chi tiết? –