Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript durandal.js视图模型通信_Javascript_Durandal - Fatal编程技术网

Javascript durandal.js视图模型通信

Javascript durandal.js视图模型通信,javascript,durandal,Javascript,Durandal,有人知道在另一个视图模型中获取视图模型实例的最简单方法是什么吗。更具体地说,我想将一个视图模型的实例加载到另一个视图模型中,以便后者可以调用前者的方法 durandal是否保留合成过程中使用的所有视图模型的列表 我想解决这个问题的一种方法是应用durandal支持的pub/sub模式。 另一种方法可能是借助knockout和dataforutility函数手动获取视图模型。 但是,我想知道是否有一种方法可以显式地获取组合视图模型的实例 注意:我的模块公开了一个构造函数,而不是一个单例对象。您只需

有人知道在另一个视图模型中获取视图模型实例的最简单方法是什么吗。更具体地说,我想将一个视图模型的实例加载到另一个视图模型中,以便后者可以调用前者的方法

durandal是否保留合成过程中使用的所有视图模型的列表

我想解决这个问题的一种方法是应用durandal支持的pub/sub模式。 另一种方法可能是借助knockout和dataforutility函数手动获取视图模型。 但是,我想知道是否有一种方法可以显式地获取组合视图模型的实例


注意:我的模块公开了一个构造函数,而不是一个单例对象。您只需使用RequireJS引入viewmodel,就可以像使用另一个模块/viewmodel一样实现这一点。但是,您确实希望在viewmodel通信中避免这种情况,而是使用

viewmodel将通过事件聚合器发布事件,而另一个viewmodel则订阅该事件


查看“使用应用程序范围的消息传递”部分。

第一个viewmodel没有构建第二个viewmodel本身有什么原因吗?@Tyrsius这就是我最终使用的解决方案。我只是想知道durandal是否提供了这样一个功能,但是在快速查看了源代码之后,我认为没有类似的功能。如果您真的需要这种紧密耦合,那么@Tyrsius提到的解决方案可能是最好的方法。如果模块公开了一个构造函数,那么RequireJS就不能用于获取实例,因为您只需要获取一个构造函数。否则,我同意——一般来说,活动是一种更好的方式。我没有注意到这点。那我一定会参加活动的@JosephGabriel:用
new
和构造函数实例化对象有什么不对?还要注意,事件驱动的设计并不总是合适的;在不考虑应用程序特定需求的情况下命令它的使用听起来不太明智。它没什么错——只是不能共享数据,因为在同一个构造函数上调用
new
的两个地方最终会得到不同的实例。