我最近正在評估一個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