我最近正在评估一个
JavaScript框架,用于我们的下一个项目.我真的很喜欢Ember.但是在我们的应用程序中,我们需要一个来自数据层的事件机制来通知控制器层有些事情发生了变化.例如,我知道可以在Ember中使用obersevers:
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服务发生变化时,我也希望更新缓存.一旦缓存对象被更新,我希望通知控制器层.这基本上是为什么我需要JavaScript方面的一些事件机制.
请注意,我不想使用观察者的原因是有时,一个事件可能意味着我必须执行一个动作,即加载一个消息,或者指示语音通话来了.骨干的方式对我来说似乎更自然.
谢谢
解决方法
自从提交
2326580 – 从v0.9.6可用 – 有一个Ember.Evented
Mixin,请参阅
http://jsfiddle.net/qJqzm/.
var handler = Ember.Object.create({ otherEvent: function() { console.log(arguments); } }); var myObject = Ember.Object.create(Ember.Evented,{ init: function() { this._super(); this.on('alert',this,'alert'); },alert: function() { console.log(arguments); } }); myObject.on('otherEvent',handler,'otherEvent'); myObject.fire('alert',{ eventObject: true }); myObject.fire('otherEvent',{ first: true },{ second: true });