2013-03-09 99 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);