2017-10-09 3 views
0

Ich möchte mein Marktmodell über den Websocket-Stream aktualisiert werden.Ember.js - Aktualisieren eines Modells über Websocket Stream

Ich habe ein Plattformmodell, das viele Märkte hat.

Wenn der Benutzer das Modell zum ersten Mal anfordert, wird es aus der Back-End-Datenbank abgerufen. Ich möchte dann mit den Websocket-Daten aktualisieren.

Wie aktualisiere ich verschiedene Werte im Modell? Ich kann nicht herausfinden, wie man die Hasmany-Beziehung nach Markennamen filtert und dann die Werte festlegt. Vielleicht gibt es einen einfacheren Weg, den ich nicht sehe.

+0

'store.push' ist das, was Sie brauchen. – Lux

Antwort

0

Es ist eigentlich ziemlich einfach - diese Dinge Setup stellen Sie sicher, Sie haben:

  • Sie Ihre websocket json Daten ember wollen werden senden, das gleiche Format von json (json: ap zum Beispiel) unter Verwendung von
  • Wenn Sie Ihre Websocket-Verbindung auf der Ember-Seite der Dinge einrichten, werden Sie einen Event-Handler für die Verarbeitung empfangener Nachrichten benötigen.
  • Dieser Event-Handler verwendet store.pushPayload, um das Modell im Store hinzuzufügen/zu aktualisieren (was bedeutet, dass Ihr Websocket-Code Zugriff auf den Store benötigt).

ein Beispiel:

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

und dann in 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

Ich habe es herausgefunden, genau wie du es geschrieben hast. Leider habe ich ein Rails-Backend, von dem das Modell initialisiert wird. Danach hält ember die Dinge mit dem Websocket aktualisiert. Ich musste die Websocket-Ausgabe ändern, um das JSON-Format der Schienen-API zu entsprechen. Das funktioniert gut. Dann dachte ich, es wäre besser, das Rails-Backend auch mit dem Websocket zu aktualisieren, also müsste ich mit ActionCable gehen, um die Dinge einfach zu halten. Ich werde versuchen Ember-Cable mit einem Redis-Server zu verwenden, der alles miteinander verbindet. –

+0

Das Backend sollte nicht viel ausmachen, man kann Dinge formatieren wie man will :-) – NullVoxPopuli

Verwandte Themen