2017-10-09 8 views
0

websocketストリームを使用して市場モデルを更新しておきたいと思います。Ember.js - Websocket Stream経由でモデルを更新する

私は多くの市場を持つプラットフォームモデルを持っています。

ユーザーが最初にモデルを要求すると、そのモデルはバックエンドデータベースから取得されます。私はwebsocketのデータで更新したいと思います。

モデルの異なる値を更新するにはどうすればよいですか?私は市場の名前でhasmany関係をフィルタリングして値を設定する方法を理解できません。たぶん、私が見ていないほど簡単な方法があります。

+0

に 'store.push'は何が必要です。 – Lux

答えて

0

それは実際にはかなり簡単です - ちょうどあなたがこれらの事を設定していることを確認してください。

  • あなたはJSONの同じ形式(JSON:例えばAP)を使用して、あなたのWebSocketは燃えさしにJSONデータを送信したいと思います
  • WebSocket接続を物事のember側に設定すると、受信したメッセージを処理するためのイベントハンドラが必要になります。
  • このイベントハンドラは、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

あなたが書いたとおりに私はそれを理解しました。残念なことに、モデルから初期化されたレールバックエンドを持っていて、WebSocketで更新された状態を維持します。 rails APIのJSON形式と一致するようにwebsocketの出力を変更する必要がありました。これは正常に動作します。それから、私は、レールバックエンドをwebsocketで更新したままにしておくほうがいいと思っていました。だから、物事を単純に保つためにはActionCableに行く必要があります。 Ember-Cableを使用して、すべてを結ぶRedisサーバーを使用しようとします。 –

+0

バックエンドは大したことではありませんが、あなたは望みどおりにフォーマットすることができます:-) – NullVoxPopuli

関連する問題