knockout.js - pobierz ViewModel z elementu DOM


83

czy jest możliwe uzyskanie powiązanego obiektu JavaScript ViewModel z danego elementu DOM?

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

a gdzie indziej - w raczej niepowiązanym kodzie - coś takiego:

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

byłoby nawet lepiej, gdybym mógł zrobić coś takiego:

var viewModel = ko.getViewModel( someChildElement );

Odpowiedzi:


138

Knockout ma dwie metody użytkowe, które mogą w tym pomóc.

  • ko.dataFor zwróci ViewModel, z którym jest powiązany element.
  • ko.contextForzwraca „kontekst wiązania” bieżącego elementu. Obiekt, który otrzymasz tą metodą zwróci coś takiego:

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

Więc jeśli rozumiem twoje pytanie, prawdopodobnie możesz użyć ko.dataFortutaj. Oto prosty przykład użycia dataFor.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.