2017-10-09 3 views
0

Je souhaite que mon modèle de marché soit mis à jour via le flux websocket.Ember.js - Mise à jour d'un modèle via Websocket Stream

J'ai un modèle de plate-forme qui a beaucoup de marchés. Lorsque l'utilisateur demande pour la première fois le modèle, il est extrait de la base de données principale.

Je veux ensuite mettre à jour avec les données websocket.

Comment mettre à jour différentes valeurs dans le modèle? Je ne peux pas comprendre comment filtrer la relation hasmany par nom de marché puis définir les valeurs. Peut-être y a-t-il un moyen plus simple d'y arriver que je ne vois pas.

+0

'store.push' est ce que vous avez besoin. – Lux

Répondre

0

Il est en fait assez simple - assurez-vous que vous avez ces choses configuration:

  • vous voulez que votre websocket pour envoyer des données JSON à Ember, en utilisant le même format de JSON (JSON: ap par exemple) Lorsque vous établissez votre connexion websocket sur le côté des choses, vous aurez besoin d'un gestionnaire d'événements pour gérer les messages reçus.
  • ce gestionnaire d'événements utilisera store.pushPayload pour ajouter/mettre à jour le modèle dans le magasin (ce qui signifie que votre code websocket doit avoir accès au magasin).

un exemple:

// 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(); 
    }  
} 

puis dans 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

Je l'ai compris comme vous l'avez écrit. Malheureusement, j'ai un backend de rails dont le modèle est initialisé à partir de ce moment-là et les choses sont mises à jour avec le websocket. J'ai dû modifier la sortie websocket pour correspondre au format API JSON de rails. Cela fonctionne bien. Ensuite, j'ai pensé qu'il serait préférable de garder le backend de rails également mis à jour avec le websocket, donc je devrais aller avec ActionCable pour garder les choses simples. Je vais essayer d'utiliser Ember-Cable avec un serveur redis qui relie tout ensemble. –

+0

Le backend ne devrait pas avoir beaucoup d'importance, vous pouvez mettre en forme les choses comme vous voulez :-) – NullVoxPopuli