Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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
ご清聴ありがとうございました