【问题标题】:Employing GWT's RequestFactory within Activities在活动中使用 GWT 的 RequestFactory
【发布时间】:2011-06-10 18:26:00
【问题描述】:

我的CustomerActivity 班级恰好也是 MVP 意义上的演示者。为了响应用户的操作,调用以下代码:

context.update(customer).fire(new Receiver<CustomerProxy>() {
  public void onSuccess(CustomerProxy response) {
    // set the view according to the response
  }
});

当上面的代码执行时,会发生两件事:

  • 我收到了客户的更新副本,我可以用它刷新视图的状态

  • 一个 EntityProxyChange 事件被触发

CustomerActivity 侦听 EntityProxyChange 事件,因为其他活动也会更改客户记录,我想保持 CustomerActivity 是最新的。

EntityProxyChange.registerForProxyType(eventBus, CustomerProxy.class,
  new EntityProxyChange.Handler<CustomerProxy>() {
    public void onProxyChange(EntityProxyChange<CustomerProxy> event) {
      fetchCustomer(event.getProxyId());
      // ...but what if it was me that made the change?
    }
  });

由于update 方法已经返回了一个最新的客户,我不需要在处理EntityProxyChange 的过程中再次获取客户;如果可以避免的话,我不想承担再次调用服务器的费用。

我希望EntityProxyChange 类能够为我提供实体的版本号,我可以将其与我缓存的客户版本进行比较。没有骰子。

我想我可以设置某种inTheMiddleOfAnUpdateOperation 标志,并在获取客户之前检查它。人们正在这样做吗?这个想法让我有点作呕。您能否建议一种更好的方法来编写一个监听更改并对相同实体类型进行更改的活动?

【问题讨论】:

  • 从其他活动中监听客户记录更改的原因是什么?除非我弄错了,否则您一次只能激活一个活动(正在显示)。所以其他活动做什么并不重要。当 CustomerActivity 激活并删除 EntityProxyChange Handler 时检查客户记录的更改不是更好吗?
  • 我有两个活动正在运行,每个活动都与显示的不同区域有关。一种用于查看/更改客户设置,另一种用于更改客户名称和地址详细信息。也许最好有两个不同的实体:Customer 和 CustomerSettings。不过,它们确实构成了一个概念对象的一部分。

标签: gwt requestfactory


【解决方案1】:

我不确定这是否可行,但您可以尝试创建另一个事件总线:

final EventBus customerActivityEventBus = new SimpleEventBus();

用这个 eventBus 初始化一个新的 RequestFactory 并在 CustomerActivity 中使用它。

customerActivityRequestFactory = GWT.create(CustomerRequestFactory.class);
customerActivityRequestFactory.initialize(customeActivityEventBus);
CustomerRequest context = customerActivityRequestFactory.customerRequest();

您的 CustomerActivity 仍会监听来自主 eventBus 的更改事件,但不会看到它触发的事件。 在您的其他活动中,根据您的需要,仅收听来自 customerActivityEventBus 或两者的事件。

当然,只保留一个主 eventBus 用于不是来自请求工厂的事件(即 ActivityManager、PlaceHistoryHandler 等)

【讨论】:

  • 不错的主意。问题是其他活动不会从 CustomerActivity 获得任何 EntityProxyChanges。我开始认为这两个活动需要分开。
  • 在这种情况下,我所做的是 2 个活动引发了 2 个单独的事件。我知道要编写更多样板代码,但这些确实是单独的事件,即使在您的用例中也是如此。如果我必须重构我的代码,现在我将有一个事件和一个标志来测试它是来自一个活动还是另一个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-02
  • 1970-01-01
  • 2013-02-05
  • 2012-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多