knockout.js - Ruft ViewModel vom DOM-Element ab

83

Ist es möglich, das gebundene ViewModel-JavaScript-Objekt von einem bestimmten DOM-Element abzurufen?

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

und irgendwo anders - in eher nicht verwandtem Code - so etwas:

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

Es wäre sogar besser, wenn ich so etwas tun könnte:

var viewModel = ko.getViewModel( someChildElement );
Dirk Boer
quelle

Antworten:

137

Knockout verfügt über zwei Dienstprogrammmethoden , die hier hilfreich sein können.

  • ko.dataFor gibt das ViewModel zurück, an das das Element gebunden ist.
  • ko.contextForGibt den "Bindungskontext" des aktuellen Elements zurück. Das Objekt, das Sie von dieser Methode zurückerhalten, gibt Folgendes zurück:

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

Wenn ich Ihre Frage verstehe, können Sie sie wahrscheinlich ko.dataForhier verwenden. Hier ist ein einfaches Beispiel mit dataFor.

Andrew Whitaker
quelle
13
Nun, sie sind hier dokumentiert: knockoutjs.com/documentation/unobtrusive-event-handling.html :)
RP Niemeyer