我们正在研究门户环境。在我们的一个页面上,我们有两个portlet。当某个动作发生在一个portlet上时,我们必须最小化其他portlet,反之亦然。 所以我们觉得这是一个合适的情况,我们可以使用Dojo的发布/订阅模型。但是如果我需要使用不同的主题(一个是在Portlet A上发生某些操作时发生某个操作,另一个是在PortletB上发生某个操作时发生的第二个主题)或一个主题(如最小化),我有点困惑。有人能指导我吗?使用Dojo的发布订阅模型
0
A
回答
5
这是真的取决于你,并取决于你的需求。
主题是自由形式的文本,因此您可以使用任何您喜欢的文本格式进行排列。
我自己的经验是将一个主题视为一个“事件”。因此,一个话题,一个事件。
我的经验也认为,在同一个系统中实现“命令”与事件一起实现是非常有益的 - 所以你有一个通用的命令/事件系统。
事件(因此主题)不必与您的portlet相对应。例如,一个portlet可以有多个事件(如果它们有意义),或者一个事件可以被多个portlet共享(用于共享功能或用于跨portlet通信)。
参数和数据可以与事件(即主题)一起作为参数传递。
现在,我学到的一个很好的诀窍是当事物想要订阅特定的事件实例时,有“子主题” - 即带有父主题前缀的主题。
示例:假设我们有一个名为“/ portlets/showhide”的事件,它由任何portlet在显示或隐藏时发布,以及portlet的id和指示它是显示还是隐藏的布尔变量。现在,假设一个portlet在发布时还会发布名为“/ portlets/showhide/{id}”(带有true/false参数)和“/ portlets/showhide/{id}/show”(无参数)的主题与通用的“/ portlets/showhide”主题(事件)一起显示。
现在假设一些处理程序对象实际上只在“xyz”portlet隐藏时才有兴趣。它不必订阅“/ portlets/showhide”,并听取其它不感兴趣的portlet的所有事件。它只需订阅“/ portlets/showhide/xyz/hide”即可。当一个大系统中的订阅数量增加时,这种优化会非常方便。
2
您可以使用其中传递附加参数的一个主题。像这样的:
// PortletA
dojo.publish("onPortletAction", [{sender: "PortletA"}]);
// PortletB
dojo.publish("onPortletAction", [{sender: "PortletB"}]);
....
dojo.subscribe("onPortletAction", dojo.hitch(window, window.processAction));
window.processAction = function(data) {
if (data.sender == "PortletA"){
//to do something
}
if (data.sender == "PortletB") {
//to do something
}
}
相关问题
- 1. Dojo的发布/订阅 - 如何订阅多个主题
- 2. Dojo发布 - 订阅不工作
- 3. 使用.asmx发布订阅模式
- 4. 使用发布/订阅模型发送批量消息
- 5. 使用symfony3订阅模型
- 6. 发布/订阅
- 7. WCF的发布者订阅模式
- 8. WCF的发布/订阅模式实现
- 9. 的Javascript发布/订阅模式示例
- 10. Mule发布订阅
- 11. NServiceBus发布/订阅
- 12. WCF用MSMQ发布/订阅
- 13. Dojo订阅treenode select
- 14. 使用.NET的发布/订阅模型有哪些技术可用?
- 15. 如何使用redis发布/订阅
- 16. 在C#中发布/订阅模式WCF
- 17. 调解员模式与发布/订阅
- 18. 散列表发布者订阅模式
- 19. Socket IO发布订阅模式棘手
- 20. 发布/订阅模型,该主题的结构是什么?
- 21. PointToPoint vs JMS中的发布/订阅模型?
- 22. ReactJS中的发布商/订阅者模型
- 23. 事件驱动的发布订阅模型
- 24. Sails.js简单的私人信息(发布/订阅和模型)
- 25. 可靠的发布/订阅
- 26. MVC中使用的“本地”发布订阅模式wxpython
- 27. 我可以在多个发布者和唯一订阅者中使用发布/订阅模式吗?
- 28. MeteorJS在手机上发布/订阅模型
- 29. 在发布后发布/订阅通知
- 30. 如何使用AngularJS创建发布/订阅模式