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 :)
Р.П. Нимейер,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.