web-dev-qa-db-ja.com

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

特定のDOM要素からバインドされたViewModel JavaScriptオブジェクトを取得することは可能ですか?

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 );

前もって感謝します!

75
Dirk Boer

Knockoutには、ここで役立つ2つの ユーティリティメソッド があります。

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

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

あなたの質問を理解したら、おそらくko.dataFor ここに。 これは簡単な例ですdataForを使用しています。

128
Andrew Whitaker