knockout.js - Получить ViewModel из элемента DOM

83

возможно ли получить привязанный объект JavaScript ViewModel из заданного элемента 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

У Knockout есть два служебных метода, которые могут здесь помочь.

  • ko.dataFor вернет ViewModel, к которому привязан элемент.
  • ko.contextForвозвращает «контекст привязки» текущего элемента. Объект, который вы получите из этого метода, вернет что-то вроде:

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

Так что, если я понимаю ваш вопрос, вы, вероятно, можете использовать ko.dataForздесь. Вот простой пример использования dataFor.

Эндрю Уитакер
источник
13
Они задокументированы здесь: knockoutjs.com/documentation/unobtrusive-event-handling.html :)
Р.П. Нимейер,