3

在模型的灰烬指南中它说(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();
    },

    //....

有人可以帮我使用 websocket 适配器吗?

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

4

2 回答 2

1

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

至少,您应该能够将其用作灵感:

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

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

于 2013-10-15T20:27:34.363 回答
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 或 update 方法。这对于具有通道(例如 SSE 或 Web Sockets)的 Web 应用程序非常有用,可以将后端的新记录或更新记录通知它。

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

于 2014-08-28T13:21:29.403 回答