2012-12-23 4 views
69

có thể lấy đối tượng JavaScript ViewModel được ràng buộc từ một phần tử DOM đã cho không?knockout.js - Nhận ViewModel từ phần tử DOM

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

và ở một nơi khác - trong mã chứ không phải không liên quan - một cái gì đó như thế này:

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

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

var viewModel = ko.getViewModel(someChildElement); 

Cảm ơn trước!

Trả lời

118

Knockout có hai utility methods có thể trợ giúp tại đây.

  • ko.dataFor sẽ trả về ViewModel mà phần tử được ràng buộc.
  • ko.contextFor trả về "ngữ cảnh ràng buộc" của phần tử hiện tại. Các đối tượng bạn nhận được trở lại từ phương pháp này sẽ trở lại 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, có lẽ bạn có thể sử dụng ko.dataFor đây. Here's a simple example sử dụng dataFor.

+9

Chúng được ghi lại ở đây: http://knockoutjs.com/documentation/unobtrusive-event-handling.html :) –

+1

@RPNiemeyer: Ahh, tiếc, nhờ liên kết. –

+0

Hoàn hảo! :) cảm ơn –