我最近正在评估一个JavaScript框架,用于我们的下一个项目。我真的很喜欢Ember。但在我们的应用程序中,我们需要一个来自数据层的事件机制来通知控制器层有什么变化。我知道有一个能在余烬使用obersevers,例如,:EmberJs是否支持发布/订阅者事件模式?
person.addObserver('fullName', function() {
// deal with the change
});
但我更喜欢的,你可以订阅或发布事件Backbone.Events,具体是:
var object = {};
_.extend(object, Backbone.Events);
object.on("alert", function(msg) {
alert("Triggered " + msg);
});
object.trigger("alert", "an event");
任何人有一个想法这在EmberJS中是否可行?
也给你一些关于我的问题的背景,我们的应用程序是一个实时应用程序。所以有时候,后端RESTful服务会将一个事件触发到客户端(JavaScript端)。我想有一个数据层封装对后端RESTful服务的访问,但也保留一个缓存。我希望EmberJS.Data可以帮助我(这是一个单独的问题,我想找到答案)。因此,我希望在后端RESTful服务发生更改时更新缓存。一旦缓存对象被更新,我想要通知Controller层。这基本上是为什么我需要JavaScript方面的一些事件机制。
请注意,我不想使用观察者的原因是,有时候,事件可能意味着我必须执行操作,即加载消息或指示语音呼叫即将到来。骨干方式对我来说似乎更加自然。
感谢
我将如何使用您的解决方案的事件退订? – Parzifal 2014-05-12 07:38:48
@Parzifal,添加一个类似于“订阅”的方法“取消订阅”,它调用http://emberjs.com/api/classes/Ember.Evented.html#method_off而不是“on”。然后,您可以像App.Hub.unsubscribe('test-started')一样使用它。 – digitalbreed 2014-06-28 07:29:18