问题标签 [observer-pattern]

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 投票
4 回答
296 浏览

design-patterns - 你应该使你的 Observables/Listenables 有多精细?

您有一个面向拉动的 Observable/Listenable,它会在某些状态发生变化时通知观察者/监听者。

状态由多个数据块组成,您的一些观察者/侦听器并不关心整个状态。

你通常更喜欢通知所有的观察者/监听者,并允许他们在他们关心的任何事情没有改变时忽略通知吗?

或者您通常更喜欢为每个“块”数据使用单独的 Observable,以便保证您的观察者/侦听器只获得他们需要响应的通知?

这取决于情况吗?

您对 Observables/Listenables 的粒度有什么一般的想法吗?

0 投票
2 回答
5983 浏览

javascript - 更新:如何在原型中的 DOM 节点上找到事件监听器?

我正在寻找这个问题的更新答案。

似乎在 Prototype 1.6+ 中不再使用 Event.observers(也许是为了避免内存泄漏),那么我现在如何追踪哪些事件侦听器附加到元素?

我知道 Firebug 有一个“下一个中断”按钮,但是在我可以在另一个特定元素上获得我想要的行为之前,body 元素上有几个鼠标侦听器会执行,那么还有其他方法吗?

0 投票
7 回答
6333 浏览

ruby-on-rails - 在 Rails 中,在仅模型设置中不会调用 Sweeper

我正在开发一个 Rails 应用程序,我在其中使用页面缓存来存储静态 html 输出。缓存工作正常。不过,我在使缓存过期时遇到问题。

我相信我的问题部分是因为我没有使控制器中的缓存过期。为此所需的所有操作都在模型中处理。这似乎应该是可行的,但是我发现的所有对基于模型的缓存过期的引用似乎都已过时,或者无法正常工作。

在我的 environment.rb 文件中,我正在调用

我在 /sweepers 文件夹中有一个 LinkSweeper 文件:

那么......为什么在我更新模型时它不删除缓存页面?(过程:使用脚本/控制台,我正在从数据库中选择项目并保存它们,但它们的相应页面并未从缓存中删除),并且我还在调用通常会调用的 Link 模型中的特定方法扫地机。两者都不起作用。

如果重要,缓存文件是链接表中键值的 md5 散列。缓存页面存储为 /l/45ed4aade64d427...99919cba2bd90f.html 之类的内容。

从本质上讲,Sweeper 似乎并没有真正观察 Link。我还读到(这里)可能可以简单地将清扫器添加到 environment.rb 中的 config.active_record.observers,但这似乎没有这样做(而且我不确定 app/sweepers 的 load_path 是否在 environment.rb 中避免了这一点)。

0 投票
1 回答
374 浏览

design-patterns - 持久性模式 - 基于规则的观察者

我正在尝试向应用程序添加功能,用户可以在其中订阅所做的更改:

  • 到另一个实体(由任何用户)
  • 由另一个用户(对任何其他实体)
  • 两者的组合(最后一个是可选的,但使问题更具挑战性)

我想知道如何最好地将这些规则保存到数据库中。

我自然倾向于每个给定的实体(包括用户本身),我添加了一个额外的 UserSubscription 表/实体(例如,PublisherUserSubscription、BookUserSubscription、UserUserSubscription)

这意味着订阅将保持完整性并强制执行。但是,如果我以后更改订阅模型,这似乎会迅速增加我需要的表数量,并且可能导致非常脆弱的设计。(可能需要更新每个现有表)。

鉴于这是一个相当普遍的现实世界场景,我预计会有一些模式。谁能推荐一些?

0 投票
5 回答
790 浏览

c# - 网络观察者

我想要一个事件驱动的架构,其中事件消费者(订阅者/观察者)和事件生产者(发布者/主题)位于分布式地理上。

.NET 中是否有一些东西可以通过网络无缝中继事件,而我不必深入研究传输机制的实现?

我记得 Juval Lowy 在大约两年前的 DNR 节目中谈到企业服务,但不记得那是什么了。

任何人都知道我可以从 .NET 框架中使用什么来做到这一点?

0 投票
2 回答
3135 浏览

java - Java 观察者和可观察者

谁能解释为什么当我单击此 JFrame 上的按钮时没有调用 printobserver 上的更新方法?

0 投票
3 回答
16897 浏览

ruby-on-rails - 观察者与回调

我考虑过使用观察者或回调。什么时候应该使用观察者?

您可以执行以下操作:

或者你可以创建一个观察者并让它观察用户何时被创建......

你推荐什么?

0 投票
2 回答
5149 浏览

php - 如何使用 livevalidation javascript 库 custom.validation 函数?

(注意:我的原始问题未链接到我的 openid - 我在此处重新发布以便能够相应地编辑/更新/响应 - 如果任何有权访问的人可以删除原始问题:/questions/1554916/how-to-use-the -livevalidation-javascript-library-custom-validate-function 会很棒!!)

嘿,伙计们,

我对这一切都很陌生,所以请多多包涵!

我已经设法创建了一个表单,对字段进行实时验证检查,并使用 ajax/json 检查来查看用户名是否有效。我似乎与标准的实时验证相处得很好。

这是我目前所拥有的演示:链接文本

对 ajax 用户名检查做出响应的方法只是将 a 更改为带有消息以使其可见,因此我想使用 livevalidation 检查来管理 ajax 响应 - 所以我可以将它们链接在一起(检查空白,然后在使用,然后无效,然后通过 ok)并以相同的方式输出我的响应。

我目前有这个表单代码:

这是在后台运行的 json 部分:

因此,查看 livevalidation 文档,您可以以这种方式使用自定义验证:

我发现这非常神秘 - 我认为我应该能够指出'function(r)' 那里已经准备好了 - 但我怀疑我这样做的方式是否正确,

任何人都可以阐明任何观点,我(希望!)理解它并找到解决方案!

* 更新 *

我现在被引导相信 validate.custom 部分的这段代码应该可以工作:

然而,我似乎有一个架构问题——实时验证需要一个即时的答案,而 ajax 发生在后台。我有一个建议来调查“观察者模式”,这对我来说是一个全新的概念——我通常在玩 cms 的图形设计和结构方面!

任何进一步的帮助/澄清表示赞赏,因为我将不得不回到这个并让它工作!

0 投票
2 回答
376 浏览

design-patterns - 用户控件的通用观察者模式

我想为用户控件实现一个通用的观察者模式。做这个的最好方式是什么?

有 3 个用户控件:A、B 和 C。这些用户控件中的每一个都是一组数据的表示。每个控件都有一个显示模式选择(基本或详细)。网站访问者可以选择哪种模式。在更改任何一个控件的显示模式时,其他控件应反映该更改。

这里的杀手锏是用户控件可以由站点访问者动态添加到页面中,因此页面可能具有任何控件组合,包括任何控件。它们还可能出现在多个 aspx 页面上。

我在想观察者模式是最好的方法,是吗?如果是这样,是否有任何关于实现这一目标的最佳方法的例子?

谢谢,理查德

0 投票
1 回答
312 浏览

events - 事件聚合器和集合

我想使用事件聚合器将我的视图模型与视图同步(视图模型 ovservs 模型),这在模型中实现非常简单,只需在属性的设置器上调用 notify。

但是当模型有集合时它会变得更加复杂。调用通知的代码应该在哪里?模型中集合的接口是什么?列表?

我想到的唯一解决方案是继承一个基类,它将使用反射来遍历所有 IList 字段,尝试将它们强制转换为 INotifyCollectionChanged 并将添加一个将调用通知的事件处理程序。

有任何想法吗?

在此先感谢,埃里克。