Ember.js - 通过Websocket流更新模型

问题描述:

我想通过websocket流保持我的市场模型更新。Ember.js - 通过Websocket流更新模型

我有一个有很多市场的平台模型。

当用户第一次请求模型时,它会从后端数据库中检索。然后我想用websocket数据进行更新。

如何更新模型中的不同值?我无法弄清楚如何通过市场名称来筛选hasmany关系,然后设置值。也许有一个更简单的方法可以去做,我没有看到。

+0

'store.push'是你所需要的。 – Lux

这其实很简单 - 只要确保你拥有这些东西的设置:

  • 你会想你的WebSocket到JSON数据发送到烬,使用JSON的相同的格式(JSON:AP为例)
  • 当你在事物的余烬端建立你的websocket连接时,你需要一个事件处理器来处理接收到的消息。
  • 事件处理程序将使用store.pushPayload在商店中添加/更新模型(这意味着您的websocket代码需要访问商店)。

一个例子:

// some controller.js 
import Controller from '@ember/controller'; 
import { action } from 'ember-decorators/object'; 

import myAwesomeWebSocketStuff from 'lib/websocket'; 


export default class extends Controller { 
    init() { 
    const socket = myAwesomeWebSocketStuff(this.store); 

    this.set('socket', socket'); 
    } 

    willDestroy() { 
    this.get('socket').disconnect(); 
    }  
} 

,然后在lib/websocket.js

import SomeWebSocketLibrary from 'some-library'; 

export default function(store) { 
    const socket = new SomeWebSocketLibrary(url); 

    socket.connect(); 
    socket.on('receive', data => store.pushPayload(data)); 

    return socket; 
} 
+0

我就像你写的那样想出来了。不幸的是我有一个rails后端,模型从那时开始初始化,并且使用websocket更新了更新。我不得不修改websocket输出以匹配rails API JSON格式。这工作正常。然后我认为最好还是使用websocket来更新rails的后端,所以我不得不使用ActionCable来保持简单。我将尝试使用Ember-Cable和一个将所有内容链接在一起的redis服务器。 –

+0

后端应该不是很重要,你可以设置格式,但是你想要:-) – NullVoxPopuli