问题标签 [eventaggregator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2341 浏览

javascript - Backbone.js“胖路由器”设计难题

在过去的两周里,我一直在学习主干和相关工具以及编写应用程序。我遇到了一个设计问题,想知道有哪些可用的解决方案,以及 Backbone 专家是否认为这是一个问题。

问题:我最终不得不将我所有的视图依赖项放在我的 router.js 中,并且无法弄清楚它们是否可以解决这个问题。下面是来自我的 router.js 的代码:

router.js 包括LandingViewDashboardView视图,它们依次获取相应的模板。初始路由加载具有登录模板的 LandingView。登录后,它调用 router.js 的 goTo 方法生成一个 DashboardView()。虽然这可行,但我觉得它有点难看。但是我不知道如何从 LandingView 生成一个新的 DashboardView,而不直接从 LandingView() 内部或从路由器引用 DashboardView()。

如果我继续通过 router.js 执行此操作,我最终会直接或间接地从路由器中提取我的所有视图 js 文件。听起来有点丑!

我查看了 Derick Baileys 的事件聚合器模式,但面临的问题是,如果 DashboardView 的实例还不存在,DashboardView 如何订阅由 LandingView 生成的事件?必须有人创建并初始化它才能订阅事件聚合器,对吗?如果那个人是路由器,我是否需要在路由器中预先实例化所有视图?那没有意义。

0 投票
2 回答
2086 浏览

c# - 将 Rx 与 Prism 的 EventAggregator 一起使用或与它们一起使用 - 建议的方法?

令我震惊的是,Prism 和 Rx 框架之间既有一些重叠也有冲突EventAggregator,因为两者都是关于订阅事件流的。Rx 显然提供了更细粒度的控制,而 RxEventAggregator提供了松散耦合的、应用程序范围的、发布-订阅基础设施。

所以我的问题是,我们如何在同一个应用程序中有效地利用这两种技术?我是否混淆了他们的角色,或者我错过了某个地方的区别?有没有人有这样做的经验?

0 投票
2 回答
2151 浏览

wpf - 在 Prism/Composite MVVM WPF 应用程序中使视图模型激活感知

在我的 MVMC 应用程序中,我有一个包含多个步骤的过程,基本上是一个向导。

我的控制器解析了我的外部视图(调用它WizardView)并将其添加到主区域。

WizardView包含一个面包屑路径以显示向导的进度和一个子区域以将其他视图加载到其中(称为 this WizardRegion)。Step1View是加载到的第一个视图WizardRegion

每个视图都使用 Unity 容器将其 ViewModel 注入到构造函数中。

WizardViewModel订阅由步骤视图模型发布的多个事件聚合事件。

随着每个步骤的完成,视图模型会发布一个WizardViewModel用于存储状态的事件,这意味着WizardViewModel随着我们的进行收集来自每个步骤的数据。步骤 ViewModel 还调用控制器将下一步加载到WizardRegion.

在最后一步WizardViewModel保存向导的结果并MainRegion导航回其他屏幕。

下次进入向导时,我们会创建所有视图和 ViewModel 的新实例,但前一个向导中的事件订阅仍然存在。

如何让我的视图模型知道它们已停用,以便我可以取消订阅我的事件?

另一种选择是取消订阅事件处理程序中的事件。这可能会起作用,但是当我退回向导并需要再次重新订阅事件时会增加复杂性。

0 投票
1 回答
233 浏览

javascript - 使用事件在视图设计模式之间进行通信

当您有一个引用另一个视图并侦听其事件的视图时,事件处理程序很好,这非常适合解耦和可重用性。

但问题是有时我有未引用的视图,所以我使用事件聚合器,它是一个全局通知来了解是否发生了某些事情......但是当我只想听我无法引用的孩子的观点时,这似乎不对,比如DOM 层次结构中的冒泡事件。

但让我说我有一个视图层次结构,如:

  • 父视图
    • 子视图
      • 子视图
        • 模态视图

我想知道当 ModalView 触发事件时在ParentView中...我不能使用事件冒泡,因为ModalView不在同一个 DOM 层次结构中,所以在这种情况下我应该使用 Event Agregator 还是其他什么?我真的希望那个事件泡沫适合我的情况。

0 投票
1 回答
991 浏览

wpf - 如何在 PRISM CompositePresentationEvent 的发布者上调用回调操作?

是否可以在订阅者处理 PRISM CompositePresentationEvent 的发布者上调用回调操作?如果是,我该怎么做?

这是示例场景:

  • 主页
  • 左控制
  • 右控制

LeftControl 发布一个事件,RightControl 订阅以对事件采取行动。完成右侧控件中的操作后,我想执行另一个函数来刷新左侧控件。

0 投票
5 回答
1261 浏览

wpf - 用于从父菜单绑定子 ViewModel 上的命令的模式

我正在使用 Caliburn Micro 创建一个 WPF MVVM 应用程序。我在一个菜单(功能区)中有一组按钮,它们位于我的 shell 视图模型的视图中,它是一个 ScreenConductor。基于当前活动的屏幕视图模型,如果功能区按钮可用于活动屏幕,我希望禁用/启用它们,并在活动屏幕上调用操作或命令。

这似乎是一个常见的场景。是否有创建这种行为的模式?

0 投票
1 回答
1268 浏览

c# - 事件聚合器的 GetEvent<>.Subscribe 给出异常

我正在使用反射加载 dll,然后尝试在该 dll 中执行一个方法。该方法具有订阅事件的这一行。我在这条线上有一个例外

此行位于我使用反射动态调用的 dll 中

例外是这样的:

IDelegateReference 的目标应该是 System.Action`1[[CustomType, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] 类型。参数名称:actionReference

这是事件处理方法,并且在我动态调用的同一个 dll 中

任何帮助,将不胜感激?

0 投票
1 回答
2155 浏览

.net - 反应式扩展与事件聚合器

我是反应式扩展的新手。我知道 Rx 会观察底层对象的任何更改(在运行时),并在更改时通知订阅者。

考虑事件的 Rx,它检查任何事件并将这些更改发布到订阅。同样,我们有事件聚合器,它将事件发布给订阅者。两者都在做同样的工作。两者都有相同的目的。我们两者之间有什么区别吗?

感谢您的答复

0 投票
2 回答
3264 浏览

javascript - 简单的事件聚合器

我正在寻找一个与 require.js 一起使用的简单事件聚合器。我有两个模块,一个包含视图模型,另一个包含某种“侦听器”:

有什么东西可以做到这一点吗?这种架构甚至是一个好主意吗?这是我第一次涉足客户端架构。

0 投票
2 回答
770 浏览

backbone.js - Backbone EventAggregator 问题和问题

我正在构建一个 Backbone 应用程序,使用 require.js 进行模块化加载,并使用 Marionette 来帮助我的应用程序结构和功能。我已经为事件聚合器设置了一个 require 模块,如下所示:-

我希望将它传递到我的其他 require 模块中,并让它充当中央事件处理和消息传递组件,我在这方面取得了一些成功。我可以将通风口作为依赖项传递给其他模块,而不会出现这样的问题:-

我遇到的问题是,尽管所有事件都在我的应用程序的不同位置触发(我可以在控制台日志中看到),但我无法在我的应用程序的某些部分收听它们。例如,我有一个 Marionette 模块(在运行时作为 require 模块加载),它试图获取一些这样的事件:-

我什么也没得到,即使我从这个地方记录通风口,我也可以将它视为一个对象。在日志中,它包含一个事件数组,实际上只包含根级应用程序正在侦听的事件,而不是应用程序其他部分正在侦听的任何其他事件。这就是我的理解分崩离析的地方:我认为我可以将事件聚合器用作跨应用程序结构的全局通信和消息传递系统。任何人都可以对可能发生的事情有所了解吗?

非常感谢,

山姆

*更新/编辑/解决方案*

您好,好吧,我现在可以正常工作了(发布上述内容后仅 5 分钟-doh!)。基本上,在模块的初始化事件中添加我的监听器为时过早(据我所知)。我将它们沿着功能链进一步移动,现在一切都按预期运行。