带Websockets的Ember数据

时间:2013-10-15 20:22:02

标签: javascript ember.js

在模型的ember指南中,它说(1):

  

Ember Data还可以与socket.io,Firebase或WebSockets等流媒体API配合使用。您可以打开服务器的套接字,并在记录发生时将更改推送到商店。

我尝试编写一个使用websocket的自定义适配器但是我没有走得太远。我在任何地方找不到任何有用的例子。

这是我完全未完成的原型:

DS.WSAdapter = DS.Adapter.extend(Ember.Evented, {

    websocket: undefined,

    init: function () {
        if(this.websocket === undefined)
        {
            this.websocket = new WebSocket('ws://localhost:8887');

            this.websocket.onopen = function(e) {
                console.log("Connection established!");

            };
            this.websocket.onmessage = function(e) {
                // What to do here?
            }; 
        }

        this._loadData();
    },

    //....

请somone请帮我使用websocket适配器?

我的主要问题是,我不知道websocket.onmessage()执行时该怎么做。我甚至无法访问商店(使用DS.get('defaultStore'))或任何其他

2 个答案:

答案 0 :(得分:1)

我没有直接使用Ember中的套接字的经验,但是我最近完成了一个Ember Data + Firebase适配器,它应该遵循非常相似的方法。

你至少应该能够将它作为灵感来使用:

https://github.com/sandersonet/ember-data-firebase

Firebase确实从下面的套接字提供了额外的抽象层,但方法非常相似。

答案 1 :(得分:0)

查看http://emberjs.com/guides/models/frequently-asked-questions/#toc_how-do-i-inform-ember-data-about-new-records-created-on-the-backend

  

某些应用程序可能希望在商店中添加或更新记录   没有通过store.find请求记录。为了实现这一点   可以使用DS.Store的push,pushPayload或更新方法。这是   对于具有通道的Web应用程序(例如SSE或Web)非常有用   套接字)通知后端的新记录或更新记录。

基本上,您需要对在onmessage挂钩中收到的数据进行反序列化,并使用store.push('model', record)或其他方法将新对象推送到数据存储。