2012-07-17 29 views
14

Tôi có một yếu tố mà sở hữu một thuộc tính có giá trị ràng buộc với một loại trực tiếp quan sát được:Initialize Knockout thể quan sát được từ giá trị thuộc tính nguyên tố

<text transform='matrix(1 0 0 1 1 1)' data-bind='attr:{transform:textTransform}'></text>

Khi tải phần tôi muốn các quan sát để chứa các giá trị xác định trên các yếu tố dom, tuy nhiên nó thay vì tải như không xác định và thuộc tính được lấy ra từ các yếu tố dom alltogether:

<text data-bind='attr:{transform:textTransform}'></text>

có thể t o khởi tạo giá trị của một loại trực tiếp có thể quan sát được từ thuộc tính phần tử dom và duy trì giá trị của thuộc tính phần tử dom?

UPDATE: http://jsfiddle.net/5Z2SC/10/

Trả lời

19

Một lựa chọn khác là sử dụng một tùy chỉnh ràng buộc, và thu thập các giá trị hiện tại của nguyên tố này trong hàm init. Điều này là nhiều hơn nữa tái sử dụng, theo ý kiến ​​của tôi.

ko.bindingHandlers.transform = { 
    init: function(element, valueAccessor) { 
     valueAccessor()(element.getAttribute('transform')); 
    }, 
    update: function(element, valueAccessor) { 
     var value = valueAccessor(); 
     element.setAttribute('transform', ko.utils.unwrapObservable(value)) 
    } 
}; 

Tất nhiên, bạn sẽ phức tạp hơn, vì bạn phải làm gì đó với tài sản chuyển đổi này. Logic đó có lẽ sẽ muốn đi vào phần update.

5

các thuộc tính dữ liệu ràng buộc không được phân tích cú pháp cho đến khi bạn gọi ko.applyBindings(). Vì vậy, nếu bạn cần để có được dữ liệu thuộc tính của các yếu tố của bạn, bạn có thể làm điều đó như thế này.

function MyModel(){ 
    this.textTransform = ko.observable($('#myElement').attr('transform')); 
} 

ko.applyBindings(new MyModel()); 

về cơ bản, bạn lấy giá trị của thuộc tính và đặt giá trị ban đầu là có thể quan sát được. các thuộc tính liên kết dữ liệu có nghĩa là một khuôn mẫu, vì vậy các giá trị ban đầu hoặc giá trị mặc định sẽ được chỉ định trong ViewModel của bạn.

sự lựa chọn nào khác là phải viết một chất kết dính tùy chỉnh, có thể lưu trữ một mặc định nếu trở lại quan sát được là null ...

+0

Cảm ơn, nhưng tôi đã đi với trình xử lý ràng buộc tùy chỉnh. Giá trị mặc định được mã hóa cứng cho các quan sát được khởi tạo không phải là những gì tôi đang tìm trong trường hợp này vì giá trị thuộc tính phần tử sẽ khác nhau tùy thuộc vào giá trị nào được tải. – KodeKreachor

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