22

既然我正在使用 RequireJS,如何在 Chrome 控制台中访问 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示例中的当前值?

4

3 回答 3

35

Knockout 包含的功能ko.dataFor可以ko.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

这里是关于如何使用 chrome 调试 KnockoutJS 的分步指南:http: //devillers.nl/quick-debugging-knockoutjs-in-chrome/

使用 Chrome 的 $0_$4 功能:https ://developers.google.com/chrome-developer-tools/docs/commandline-api#0-4

于 2013-03-09T13:35:10.680 回答
14

正如 Ryan 建议的那样,最快的方法是在控制台中使用ko.contextForko.dataFor查看 dom 上元素的绑定上下文。

还有一个非常有用的 Chrome 扩展,它使用了名为 KnockoutJS Context Debugger 的原理,可在此处获得:

Chrome 网上应用店 - KnockoutJS 上下文调试器

它允许您检查元素并在元素窗格的侧栏中查看它的上下文。如果您在一个页面上有多个绑定上下文,或者非常嵌套的绑定上下文,这是最有用的。

于 2013-04-04T02:42:45.330 回答
11

Require 就是没有全局变量:

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

再次引入全局变量

您可以在控制台中使用它:

require("knockout").dataFor($0);
require("knockout").contextFor($0);
于 2013-10-18T05:02:16.013 回答