2011-06-10 75 views
1

我的CustomerActivity类也恰好是MVP意义上的主持人。为了响应用户的操作,下面的代码被称为:在活动中使用GWT的RequestFactory

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标志,并在取得客户之前检查它。那是人们在做什么?这个想法让我感到窒息。你能否提出一种更好的方式来编写一个活动来监听变化并对相同的实体类型进行更改?

+0

什么是倾听来自其他客户的活动记录变化的原因?除非我错了,否则一次只有一个活动处于活动状态(正在显示)。那么其他活动做什么并不重要。在CustomerActivity变为活动状态时检查客户记录的更改并移除EntityProxyChange处理程序不是更好吗? – jonasr 2011-06-10 08:21:00

+0

我有两个活动正在运行,每个活动都与显示的不同区域有关。一个用于查看/更改客户设置,另一个用于更改客户名称和地址详细信息。也许最好有两个不同的实体:Customer和CustomerSettings。尽管它们构成了一个概念对象的一部分。 – David 2011-06-10 08:58:57

回答

1

我不知道这会工作,但你可以尝试创建另一个事件总线:

final EventBus customerActivityEventBus = new SimpleEventBus(); 

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

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

你CustomerActivity仍然会听从主eventBus改变事件,但不会看到它触发的事件。 在您的其他活动中,只能从customerActivityEventBus或两者中收听事件,具体取决于您想要的内容。

当然,只保留一个主eventBus使用的不是来自一个要求在工厂的事件(即ActivityManager,PlaceHistoryHandler,等..)

+0

不是一个坏主意。问题在于其他活动不会从CustomerActivity获取任何EntityProxyChanges。我开始认为这两项活动需要分解。 – David 2011-06-10 11:02:51

+0

在这种情况下,我所做的是有2个活动抛出2个不同的事件。我知道要编写更多的锅炉代码,但实际上这些都是单独的事件,即使在你的用例中也是如此。如果我不得不重构我的代码,现在我会有一个事件和一个标记来测试它是来自一个活动还是另一个活动。 – 2011-11-30 13:50:19