2012-12-23 34 views
69

jest możliwe, aby uzyskać bindowany obiekt JavaScript ViewModel z danego elementu DOM?knockout.js - Get ViewModel z elementu DOM

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

i gdzie indziej - w raczej niepowiązanych kodu - coś takiego:

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

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

var viewModel = ko.getViewModel(someChildElement); 

Dzięki z góry!

Odpowiedz

118

Knockout ma dwa utility methods, które mogą pomóc tutaj.

  • ko.dataFor zwróci ViewModel, do którego element jest związany.
  • ko.contextFor zwraca "kontekst bindowania" bieżącego elementu. Przedmiotem wrócisz z tej metody zwróci coś takiego:

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

Więc jeśli dobrze rozumiem pytanie, prawdopodobnie można użyć ko.dataFor tutaj. Here's a simple example przy użyciu dataFor.

+9

Cóż, są one udokumentowane tutaj: http://knockoutjs.com/documentation/unobtrusive-event-handling.html :) –

+1

@RPNiemeyer: Ahh, whoops, dzięki za link. –

+0

Idealny! :) dzięki –

Powiązane problemy