2013-03-09 108 views
18

現在我正在使用RequireJS,如何訪問Chrome控制檯中的KnockOut ViewModel變量?使用Chrome控制檯通過RequireJS訪問Knockout ViewModel

在使用RequireJS之前,我遵循命名空間模式,將所有內容隱藏在單個全局內。我可以通過在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

好了,你不能 - 鉻控制檯不是一個JavaScript調試器!但爲什麼不使用'console.log(testVar);'來檢查該變量的值? – Niko 2013-03-09 12:33:33

+1

您可以在chrome中使用斷點並檢查值 – 2013-03-09 14:40:06

+1

@Niko'testVar'綁定到函數作用域,並且不可從外部訪問。 – 2013-03-09 16:31:39

回答

24

基因敲除功能包括功能ko.dataForko.contextFor,可以讓您訪問給定元素的KO視圖模型信息。

所以,在控制檯中,你可以這樣做:

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

在你的情況,testVar不外露,所以你仍然不能訪問它。我以爲你只是一個樣本,雖然,你的意思是這樣的:

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

現在,用上面的方法你就可以做vm.testVar()

這裏訪問vm.testVar並將其值是該文檔是我們對這些功能: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,當我輸入'var = vm = ko.dataFor(document.body);' – eh1160 2013-03-09 20:12:07

+7

'時,我得到'ReferenceError:ko is not defined'啊,如果你通過require.js加載KO,那麼它不會是全球性的。通常我已經公開了全局的Knockout'window.ko = ko;'能夠做到這樣的事情。 – 2013-03-09 22:10:00

+0

這是一個偉大的工作。我不知道爲什麼我早一點沒有!謝謝! – eh1160 2013-03-14 10:49:01

14

瑞安建議,最快的方式是使用ko.contextForko.dataFor在控制檯上看到的DOM元素的綁定上下文。

還有一個非常有用的Chrome擴充功能,利用這一原理被稱爲KnockoutJS語境調試器,可在這裏:

Chrome Web Store - KnockoutJS Context Debugger

它可以讓你檢查一個元素,看看它的上下文中的元素的邊欄窗格。它在頁面上有多個綁定上下文或嵌套的上下文非常有用。

+1

+1推薦一款神奇工具 – 2013-10-22 00:54:32

+0

2017年6月崩潰Chrome – 2017-06-09 10:04:01

7

要求是所有關於沒有全局:

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

是引入全局再次

您可以在控制檯中使用:

require("knockout").dataFor($0); 
require("knockout").contextFor($0);