knockout.js - Obtener ViewModel del elemento DOM


83

¿Es posible obtener el objeto JavaScript ViewModel enlazado de un elemento DOM dado?

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

y en otro lugar, en un código bastante no relacionado, algo como esto:

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

incluso sería mejor si pudiera hacer algo como:

var viewModel = ko.getViewModel( someChildElement );

Respuestas:


138

Knockout tiene dos métodos de utilidad que pueden ayudar aquí.

  • ko.dataFor devolverá el ViewModel al que está vinculado el elemento.
  • ko.contextFordevuelve el "contexto de enlace" del elemento actual. El objeto que obtiene de este método devolverá algo como:

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

Entonces, si entiendo tu pregunta, probablemente puedas usar ko.dataForaquí. Aquí hay un ejemplo simple usando dataFor.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.