knockout.js-DOM要素からViewModelを取得します


83

バインドされたViewModelJavaScriptオブジェクトを特定の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には、ここで役立つ2つのユーティリティメソッドがあります。

  • ko.dataFor 要素がバインドされているViewModelを返します。
  • ko.contextFor現在の要素の「バインディングコンテキスト」を返します。このメソッドから返されるオブジェクトは、次のようなものを返します。

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

ですから、あなたの質問を理解できれば、おそらくko.dataForここで使用できます。を使用した簡単な例次に示しdataForます。


13
それらはここに文書化されています:knockoutjs.com/documentation/unobtrusive-event-handling.html :)
RP Niemeyer 2012
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.