Ember.js EmberJs是否支持发布/订阅事件模式?

Ember.js EmberJs是否支持发布/订阅事件模式?,ember.js,Ember.js,我最近正在评估一个JavaScript框架,它将用于我们的下一个项目。我真的很喜欢余烬。但是在我们的应用程序中,我们需要一个来自数据层的事件机制来通知控制器层发生了变化。例如,我知道可以在余烬中使用obersevers: person.addObserver('fullName', function() { // deal with the change }); 但我更喜欢主干网。您可以订阅或发布活动的活动,特别是: var object = {}; _.extend(object, B

我最近正在评估一个JavaScript框架,它将用于我们的下一个项目。我真的很喜欢余烬。但是在我们的应用程序中,我们需要一个来自数据层的事件机制来通知控制器层发生了变化。例如,我知道可以在余烬中使用obersevers:

person.addObserver('fullName', function() {
  // deal with the change
});
但我更喜欢主干网。您可以订阅或发布活动的活动,特别是:

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服务发生更改时更新缓存。一旦缓存对象被更新,我希望控制器层得到通知。这就是为什么我在JavaScript端需要一些事件机制

请注意,我不想使用观察者的原因是,有时,事件可能意味着我必须执行操作,即加载消息,或指示语音呼叫即将到来。主干道在我看来更自然

感谢自提交以来的-自v0.9.6版开始提供该功能-有一个
余烬。事件发生后的
,请参阅

var handler=Ember.Object.create({
otherEvent:函数(){
log(参数);
}
});
var myObject=Ember.Object.create(Ember.events{
init:function(){
这个;
这个。在('alert',this,'alert');
},
警报:函数(){
log(参数);
}
});
myObject.on('otherEvent',handler,'otherEvent');
myObject.火灾(“警报”{
eventObject:true
});
myObject.fire(“其他事件”{
第一:对
}, {
第二:对
});​

如果你想要一个通用的发布/订阅中心,你可以利用Evented中的trigger/on(正如pangratz所说),只需要一点语法糖分。以下是我正在做的:

App.Hub=Ember.Object.create({ init:function(){ set('HUB',Ember.Object.createWithMixins(Ember.events,{})); }, 发布:函数(){ var hub=this.get('hub'); 返回hub.trigger.apply(hub,参数); }, 订阅:函数(){ var hub=this.get('hub'); 返回hub.on.apply(hub,参数); } }); 然后,要在应用程序中使用它:

App.Hub.subscribe('test-started',函数(名称){ 日志(“测试”+名称+“已启动”); }); ... App.Hub.publish('test-started','Biology I'); App.Hub.publish('test-start','calculation');
如何使用您的解决方案取消订阅活动?@Parzifal,添加一个类似于“subscribe”的方法“unsubscribe”,它调用而不是“on”。然后您可以像
App.Hub.unsubscribe('test-started')
一样使用它。