web-dev-qa-db-fra.com

knockout.js - Récupère ViewModel à partir d'un élément DOM

est-il possible d’obtenir l’objet JavaScript ViewModel lié à partir d’un élément DOM donné?

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

et ailleurs - dans du code plutôt indépendant - quelque chose comme ceci:

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

ce serait même mieux si je pouvais faire quelque chose comme:

var viewModel = ko.getViewModel( someChildElement );

Merci d'avance!

75
Dirk Boer

Knockout a deux méthodes utilitaires qui pourraient aider ici.

  • ko.dataFor retournera le ViewModel auquel l'élément est lié.
  • ko.contextFor renvoie le "contexte de liaison" de l'élément en cours. L'objet que vous récupérez de cette méthode retournera quelque chose comme:

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

Donc, si je comprends votre question, vous pouvez probablement utiliser ko.dataFor ici. Voici un exemple simple en utilisant dataFor.

128
Andrew Whitaker