2013-02-28 38 views
6

Có cách nào để từ chối/hủy sửa đổi giá trị của một quan sát được không? Như thế này:Từ chối thay đổi giá trị quan sát

observable.subscribe (function (newvalue) { 
    if (newvalue < 0) { 

     // cancel changing 
    } 
    else{ 
     // proceed with change 
    } 

}, this) 

Trả lời

8

Edit:

tôi tìm thấy cái gì khác: quan sát có khả năng ghi tính.

Dưới đây là một ví dụ:

function AppViewModel() { 
    this.field = ko.observable("initValue"); 
    this.computedField = ko.computed({ 
     read: function() { 
      return this.field(); 
     }, 
     write: function (value) { 
      if(value > 0) { 
       this.field(value); 
      } 
     }, 
     owner: this 
    }); 
} 

Vì vậy, sau đó bạn liên kết với các lĩnh vực tính toán.

/Chỉnh sửa

Tôi sẽ đi kèm với một ràng buộc tùy chỉnh.

Dưới đây là hướng dẫn cho tùy chỉnh ràng buộc: http://learn.knockoutjs.com/#/?tutorial=custombindings

hoặc đây là tài liệu hướng dẫn: http://knockoutjs.com/documentation/custom-bindings.html

0

Để giúp bác bỏ giá trị ghi I sử dụng như sau:

  • Tạo một ẩn quan sát lưu trữ giá trị.
  • Trả lại mức có thể ghi có thể ghi dựa trên ẩn có thể quan sát được.
  • Khi nội dung nào đó được ghi vào quan sát được tính, hãy xác thực nó trước khi chấp nhận.

tôi mở rộng Knockout với mã này:

ko.conditionedObservable = function (initialValue, condition) { 
    var obi = ko.observable(initialValue); 
    var computer = ko.computed({ 
     read: function() { return obi(); }, 
     write: function (newValue) { 
      //unwrap value - just to be sure 
      var v = ko.unwrap(newValue); 
      //check condition 
      if (condition(v)) { 
       //set it to the observable 
       obi(v); 
      } 
      else { 
       //reset the value 
       computer.notifySubscribers(); 
      } 
     } 
    }); 
    return computer; 
}; 

Sử dụng nó trong các đối tượng như thế này:

field = ko.conditionedObservable<number>(null, (v) => parseInt(v) > 0); 

Đối với giải thích thêm kiểm tra blog Conditioning Knockout Observables: reject values tôi.

Các vấn đề liên quan