Ember.js Tokyo Reborn (https://emberjs.doorkeeper.jp/events/56135) の LT 枠で、最近の Ember Data まわりの悩みを話しました。
EmberData まわりの悩み2017/02/02 Ember.js Tokyo Reborn
View Slide
こんにちは● 寺田玄太郎● @hibariya● hibariya.org● 永和システムマネジメント
チーム開発のためのグループチャット● チーム開発のためのチャットを最速でセッティング● 速く、軽く、シンプルなUIで気持ちよく● 他のサービスとの連携が簡単に● (ずっと無料)
Idobata is using Ember.js
お話しすることEmber + Ember Data を使ってモデルを永続化しつつうまく表示するうえでの悩みについてお話しします。よりよいやり方について助言いただけると幸いです。
メッセージに★をつける機能他のチャットサービスと同様、Idobata ではメッセージに印 (★) をつけて後から読み返すことができます。つけた★は Starred Messagesで一覧できます。
やりたいことStarred Messages で★を外しても、外した人の画面上からはすぐに消えないでほしい。バックエンド (サーバ) 側には即座に反映したい。→
バックエンド (Rails)ユーザとメッセージを結ぶ Star というモデルで★を表現。● Star.create● star.destroy● current_user.stars
フロントエンド (Ember + Ember Data)バックエンドと同じく Star モデルで表現。● message.get(‘stars’).createRecord()● star.destroyRecord()● currentUser.get(‘stars’)
やりたいこと (再掲)Starred Messages で★を外しても、外した人の画面上からはすぐに消えないでほしい。バックエンド (サーバ) 側には即座に反映したい。→
問題● star.destroyRecord() を呼ぶと currentUser.get(‘stars’) のような関連から即座に消える (→一覧からも消える)。● star.deleteRecord() なら一覧に残るものの、今度はサーバに反映されない。● ★をつけ直すこともあるのでバックエンドとの整合性は保ちたい。
現在の解決策star の削除前に複製することで、クライアント側では star を維持しつつサーバ上では即座に削除。● 複製した時点ではまだ保存しない。● もし同じメッセージにまた★がつけられたらその複製を保存。● そうでなければ適当なとき (他routeへのtransitionなど) に破棄。
悩み● 削除したものを画面上で表現するのは意外に面倒。● Star に isStarred という微妙なプロパティが増えた。
ご清聴ありがとうございました