事件与参考共享

时间:2015-06-05 08:46:04

标签: java javascript php

假设我有一个TabManager类,其中包含tabs数组。还有一个控制器需要跟踪此tabs属性并在数组中绘制选项卡。我有两种方法来共享这些数据:

第一种方法是参考共享:

controller.tabs = tabManager.tabs

上述陈述也有很多变化,例如,这一个:

// getTabs() returns reference to private _tabs property
controller.tabs = tabManager.getTabs();

第二种方法是在标签数组更改时通知控制器:

tabManager.on("tabSetChange", function(tabs) {
   // tabs here are clone of tabManager.tabs, not the same reference
   // so modifying controller.tabs won't affect tabManager.tabs
   controller.tabs = tabs;
});

是否有一些经验法则可以决定选择哪种方法?最近,我倾向于使用第二种方法来防止意外的数据更改,并且使用这种方法调试似乎更容易。但第二种方法也更加精细。

1 个答案:

答案 0 :(得分:1)

从您的描述中听起来像TabManager"拥有" tabs数组并负责对其进行更改。 controller只需要信息的只读视图即可绘制标签。

大概controller需要知道tabs数组何时更改,以便需要刷新视图。简单地共享引用并不能使controller知道数组何时发生变化,TabManager必须通知它。这导致您建议更适合的事件驱动模型。

事件驱动模型允许TabManager在数组发生相关更改时以及任何关心通知的人发出事件。这种组件分离是一件好事。您可能会发现另一个组件也想要跟踪tabs数组,因此它不是硬编码与TabManager的关系,而只是注册一个事件监听器。

这种基于事件的模型非常适合JavaScript方式。