knockout.js - Отримати ViewModel від елемента DOM


83

можливо отримати прив'язаний об'єкт ViewModel JavaScript із заданого елемента DOM?

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

а десь ще - у досить не пов’язаному коді - приблизно так:

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

навіть було б краще, якби я міг зробити щось на зразок:

var viewModel = ko.getViewModel( someChildElement );

Відповіді:


138

Нокаут має два корисні методи, які можуть тут допомогти.

  • ko.dataFor поверне ViewModel, до якого прив'язаний елемент.
  • ko.contextForповертає "контекст прив'язки" поточного елемента. Об'єкт, який ви отримаєте за допомогою цього методу, поверне щось на зразок:

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

Отже, якщо я розумію ваше запитання, ви можете скористатися ko.dataForтут. Ось простий приклад використання dataFor.


13
Ну, вони задокументовані тут: knockoutjs.com/documentation/unobtrusive-event-handling.html :)
RP Niemeyer
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.