Slide 1

Slide 1 text

EmberData まわりの悩み 2017/02/02 Ember.js Tokyo Reborn

Slide 2

Slide 2 text

こんにちは ● 寺田玄太郎 ● @hibariya ● hibariya.org ● 永和システムマネジメント

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

チーム開発のためのグループチャット ● チーム開発のためのチャットを最速でセッティング ● 速く、軽く、シンプルなUIで気持ちよく ● 他のサービスとの連携が簡単に ● (ずっと無料)

Slide 5

Slide 5 text

Idobata is using Ember.js

Slide 6

Slide 6 text

お話しすること Ember + Ember Data を使ってモデルを永続化しつつうまく表示 するうえでの悩みについてお話しします。よりよいやり方について 助言いただけると幸いです。

Slide 7

Slide 7 text

メッセージに★をつける機能 他のチャットサービスと同様、Idobata ではメッセージに印 (★) をつ けて後から読み返すことができます。 つけた★は Starred Messagesで一覧できます。

Slide 8

Slide 8 text

やりたいこと Starred Messages で★を外しても、外した人の画面上からはす ぐに消えないでほしい。 バックエンド (サーバ) 側には即座に反映したい。 →

Slide 9

Slide 9 text

バックエンド (Rails) ユーザとメッセージを結ぶ Star というモデルで★を表現。 ● Star.create ● star.destroy ● current_user.stars

Slide 10

Slide 10 text

フロントエンド (Ember + Ember Data) バックエンドと同じく Star モデルで表現。 ● message.get(‘stars’).createRecord() ● star.destroyRecord() ● currentUser.get(‘stars’)

Slide 11

Slide 11 text

やりたいこと (再掲) Starred Messages で★を外しても、外した人の画面上からはす ぐに消えないでほしい。 バックエンド (サーバ) 側には即座に反映したい。 →

Slide 12

Slide 12 text

問題 ● star.destroyRecord() を呼ぶと currentUser.get(‘stars’) のよ うな関連から即座に消える (→一覧からも消える)。 ● star.deleteRecord() なら一覧に残るものの、今度はサーバに 反映されない。 ● ★をつけ直すこともあるのでバックエンドとの整合性は保ちた い。

Slide 13

Slide 13 text

現在の解決策 star の削除前に複製することで、クライアント側では star を維持しつ つサーバ上では即座に削除。 ● 複製した時点ではまだ保存しない。 ● もし同じメッセージにまた★がつけられたらその複製を保存。 ● そうでなければ適当なとき (他routeへのtransitionなど) に破棄。

Slide 14

Slide 14 text

悩み ● 削除したものを画面上で表現するのは意外に面倒。 ● Star に isStarred という微妙なプロパティが増えた。

Slide 15

Slide 15 text

ご清聴ありがとうございました