knockout.js - Nhận ViewModel từ phần tử DOM


83

có thể lấy đối tượng JavaScript ViewModel được liên kết từ một phần tử DOM nhất định không?

ko.applyBindings( gLoginViewModel, document.getElementById("login-form") );
ko.applyBindings( gLoginViewModel, document.getElementById("register-form") );

và ở một nơi khác - trong đoạn mã khá không liên quan - như thế này:

var viewModel = ko.getViewModel( formElement );
viewModel.someObservable( someData ); // observable available in all ViewModels

thậm chí sẽ tốt hơn nếu tôi có thể làm điều gì đó như:

var viewModel = ko.getViewModel( someChildElement );

Câu trả lời:


138

Knockout có hai phương pháp tiện ích có thể hữu ích ở đây.

  • ko.dataFor sẽ trả về ViewModel mà phần tử được liên kết với.
  • ko.contextFortrả về "ngữ cảnh ràng buộc" của phần tử hiện tại. Đối tượng bạn lấy lại từ phương thức này sẽ trả về một cái gì đó như:

    { 
        $data: ...,
        $parents,
        $root
    }
    

Vì vậy, nếu tôi hiểu câu hỏi của bạn, bạn có thể sử dụng ko.dataForở đây. Đây là một ví dụ đơn giản sử dụng dataFor.


13
Vâng, chúng được ghi lại ở đây: knockoutjs.com/documentation/unobtrusing-event-handling.html :)
RP Niemeyer
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.