2013-03-09 9 views
18

Chrome ConsoleのKnockOut ViewModel変数にアクセスするにはどうすればRequireJSを使用できますか?Chrome Consoleを使用してRequireJSでノックアウトViewModelにアクセスする

RequireJSを使用する前に、名前空間パターンに従って1つのグローバル内のすべてを隠していました。 Chromeコンソールに次のように入力して、グローバルにアクセスできます:window.namespaceVar。

私はRequireJSを使用しているので、すべての変数はrequire関数の後ろに隠れています。

require(['knockout-2.2.0', 'jquery'], function (ko, jQuery) { 

    var ViewModel = function() { 
      var testVar = ko.observable(true); 
     }; 

    ko.applyBindings(new ViewModel()); 
} 

この例では、現在の値のtestVarにどうすればアクセスできますか?

+2

まあ、することはできません - クロム:

require(["knockout"],function(ko){ window.ko=ko;}); 

は再び

あなたは、コンソールでこれを使用することができ、グローバルに導入されますコンソールはjavascriptデバッガではありません!しかし、なぜその変数の値をチェックするために 'console.log(testVar);'を使わないのですか? – Niko

+1

クロムにブレークポイントを使用し、値を確認することができます –

+1

@Niko 'testVar'は関数スコープにバインドされており、外部からはアクセスできません。 –

答えて

24

ノックアウトには、要素が与えられたKOビューモデル情報へのアクセスを提供する関数ko.dataForko.contextForが含まれています。

ので、コンソールでは、あなたのような何かを行うことができます:あなたはまだそれにアクセスすることはできませんので、あなたのケースでは

var vm = ko.dataFor(document.body); 

を、testVarは、露出していません。私は、あなたはしかしちょうどサンプルだったし、あなたのようなものを意味しているとします。ドキュメントはありますが、ここで

vm.testVar()を行うことでvm.testVarし、その値にアクセスできるようになる上記の方法を使用して、今すぐ

var ViewModel = function() { 
    this.testVar = ko.observable(true); 
}; 

をその我々は、これらの機能にありますhttp://knockoutjs.com/documentation/unobtrusive-event-handling.html

、ここでは、ステップ・バイ・ガイドクロムとKnockoutJSをデバッグする方法についてです: http://devillers.nl/quick-debugging-knockoutjs-in-chrome/

は、Chromeの$ 0_ $ 4機能を使用して:https://developers.google.com/chrome-developer-tools/docs/commandline-api#0-4

+0

Ryan、 'ReferenceError:koが定義されていません '、' var = vm = ko.dataFor(document.body);と入力してください。 – eh1160

+7

ああ、require.jsでKOを読み込んでいるなら、グローバル。通常、私はノックアウトをグローバルに 'window.ko = ko;'に公開しました。このようなことができるようになりました。 –

+0

これは素晴らしい解決策です。私はなぜそれが早かったのか分からない。ありがとう! – eh1160

14

ライアンが示唆したように、最も簡単な方法は、DOMの要素のバインディングコンテキストを参照するには、コンソールにko.contextForko.dataForを使用することです。

非常に便利なクローム拡張はこちらから入手でき、KnockoutJSコンテキストデバッガと呼ばれるこの原理を利用することもあります:

Chrome Web Store - KnockoutJS Context Debugger

それはあなたが要素を検査し、それが要素ペインのサイドバーにある状況だ見ることができます。ページ上に複数のバインディング・コンテキスト、または非常にネストされたバインディング・コンテキストを持つことが最も便利です。

+1

+1素晴らしいツールをお勧めします –

+0

2017年6月にChromeをクラッシュする –

7

求められる場合があり、すべてのグローバルを持っていないについてです。

require("knockout").dataFor($0); 
require("knockout").contextFor($0); 
関連する問題