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