Debugging 在Durandal中,如何在调试或开发人员工具控制台中获得活动VM的句柄?

Debugging 在Durandal中,如何在调试或开发人员工具控制台中获得活动VM的句柄?,debugging,durandal,Debugging,Durandal,首次使用Duranrdal构建应用程序,我希望能够使用chrome developer tools控制台在加载不同页面时检查我的视图模型的值 问题是我看不到window.Durandal或window.MainApp。我可以在main.js define函数中执行此操作: window.myApp = app; 但这看起来像是一个黑客,它并没有真正让我掌握当前的viewmodel。我曾想过在路由器中编写类似的代码,但这也很难看 我的应用程序和当前虚拟机是否可以以更清晰的方式访问?也许requi

首次使用Duranrdal构建应用程序,我希望能够使用chrome developer tools控制台在加载不同页面时检查我的视图模型的值

问题是我看不到window.Durandal或window.MainApp。我可以在main.js define函数中执行此操作:

window.myApp = app;
但这看起来像是一个黑客,它并没有真正让我掌握当前的viewmodel。我曾想过在路由器中编写类似的代码,但这也很难看

我的应用程序和当前虚拟机是否可以以更清晰的方式访问?也许require.js在加载模块时会将该引用放在dom的某个地方?我想如果我能找到路由器的手柄,我就没事了


我还对支持模式对话框的虚拟机的句柄感兴趣。我不确定你是否能从路由器或其他部件上获得该句柄。

在chrome开发者工具中,你可以在viewmodels中放置断点并逐步完成代码。此外,durandal会将组成的viewmodel对象记录到console.log中,以便查看它们绑定到视图的状态

下面是另一种方法,它只是利用requirejs的机制以编程方式获取对viewmodel对象的引用。只需在chrome控制台中键入以下内容:

require(['durandal/pluggins/router','yourViewModel'], function (router, vm) {
    // here you can do whatever you want now to your router or vm.
    vm.someproperty('changed');
    router.activateRoute('page2');
});
require(['durandal/pluggins/router','yourViewModel'], function (router, vm) {
    window.TestVM = vm;
    window.router = router;
});
通过在控制台中执行以下操作,您甚至可以对要更改的对象进行全局引用:

require(['durandal/pluggins/router','yourViewModel'], function (router, vm) {
    // here you can do whatever you want now to your router or vm.
    vm.someproperty('changed');
    router.activateRoute('page2');
});
require(['durandal/pluggins/router','yourViewModel'], function (router, vm) {
    window.TestVM = vm;
    window.router = router;
});
然后您可以访问这些对象,如下所示:

TestVM.someproperty('changed');
router.activateRoute('page2');

在控制台中,只需输入:

viewmodel = require('viewmodels/myviewmodel')

不需要日志,是的,我可以设置断点,但我不希望代码暂停。我喜欢改变可观测值,看看视图是如何变化的……用断点是做不到的。。。您关于在需求中引入虚拟机的建议对于路由器来说是有意义的,但是如果viewmodel不是一个单例呢?请关闭引用了另一个虚拟机实例的虚拟机。只要引用中的VM未完全封装。。这是可以做到的。如何从dialog.Show()调用中获取对话框VM的句柄?在调用dialog.Show()的VM中,是否将字符串作为参数传递给Show属性?或者你是在传递真正的amd模块?我认为您需要更改代码以公开某些对象。否则,您试图访问的对象可能会被完全封装。只传递一个字符串这是另一个建议,但如果您查看的模型不是单例呢?我使用的是基于同一谷歌chrome引擎的Opera 36。我刚刚注意到的是,在调试模式下(system.debug(true)(main.js中),至少在Durandal版本2.1中,每个激活的模型都在控制台中输出,我只需右键单击对象并选择选项“存储为全局变量”,这将创建一个名为“temp1”的全局变量,我不知道这是否适用于非单身人士,但非常方便。