41

Ember を使用したリモート オブジェクトの読み込みとキャッシュについて質問があります。REST API を介してサーバー側ストレージを使用する Ember アプリを開発しています。フェッチされたデータの一部はめったに変更されないため、アプリケーションがロードされるたびにサーバーからフェッチする必要はありません。しかし、これは、オフラインで作業し、データをサーバーに保存する必要があるアプリにとっても問題です。

Ember Data には、REST API を介してモデルを永続化するための組み込みのストレージ アダプターがあり、ローカル ストレージ用のアダプターもあります (以下の Ken が指摘したように)。問題 (問題がある場合) は、モデルにストレージ アダプターが 1 つしかなく、取得したモデルをメモリに保持する以外にキャッシュするという概念がないように思われることです。

このEmber ウィッシュリストとTom Dale によるこのトークへのコメントで同様のリクエストを見つけましたが、これが Ember の既存の機能であるという兆候は見つかりませんでした。

2 つの質問があります (最初の質問が重要です)。

  1. 現在、キャッシュされたモデルをローカル ストレージに実装し、必要に応じてリモート データと同期するための最良の方法は何ですか?
  2. これは Ember に含まれる予定の機能ですか、それともメンテナーが最終的に追加する必要があると感じている機能ですか?

1) に関しては、いくつかの戦略を考えることができます。

a) 既存のアダプターを拡張し、カスタムのリモート同期メカニズムを追加します。

App.Store.registerAdapter('App.Post', DS.LSAdapter.extend({
  // do stuff when stuff happens
}));

b) 個別のモデル クラス (リモート オブジェクト用に 1 セット、ローカル オブジェクト用に 1 セット) を維持し、必要に応じてそれらを同期します。標準の Todo ケースの場合:

RemoteTodo –*sync*– Todo
                     |
                     UI

これが本当の初心者の質問であり、これには確立された適切なパターンがあることを願っています。

更新:この類似の質問が見つかりました。良い答えがありますが、それは一種の理論的なものです。私が必要とするのは、実践的なヒントや実装例へのポインタだと思います。

4

3 に答える 3

5

このスレッドを少し「バンプ」するだけです。これは、restful api の残りローカル キャッシュなどのソリューションを調査したときの上位の結果の 1 つだったからです。

Dan Gebhardt は、Orbit.js とその Ember への統合で血なまぐさい良い仕事をしているようです: https://github.com/orbitjs/ember-orbit

Orbit は、データ ソースへのアクセスを調整し、それらのコンテンツの同期を維持するためのスタンドアロン ライブラリです。

Orbit は、オフライン操作、ローカル キャッシュのメンテナンスと同期、元に戻す/やり直しスタック、アドホック編集コンテキストなど、クライアント側アプリケーションで高度な機能を構築するための基盤を提供します。

Orbit.js の機能:

  • アプリケーションで任意の数の異なるデータ ソースをサポートし、共通のインターフェイスを介してそれらへのアクセスを提供します。

  • 優先度と代替計画を指定する機能など、さまざまなソースによる要求の履行を可能にします。

  • ソース間でレコードが異なる状態で同時に存在できるようにします。

  • ソース間の変換を調整します。可能な場合はマージを自動的に処理しますが、完全なカスタム コントロールを可能にします。

  • ブロッキング変換とノンブロッキング変換を許可します。

  • 同期および非同期のリクエストを許可します。

  • 操作の逆を追跡することにより、トランザクションと元に戻す/やり直しをサポートします。

  • プレーンな JavaScript オブジェクトを操作します。

また、Orbit に関する彼の素晴らしいスピーチとスライドをお見逃しなく:
Orbit.js の紹介

(更新: 外部リソースを「単に」参照し、実際のソリューション自体が含まれていないという理由で私の投稿が反対票を投じられたため、Orbit ページからさらに説明的な情報を追加しました。 include" これはリンク経由です。)

于 2014-07-07T22:58:13.800 に答える
3

便利なローカル ストレージ アダプターの実装があります。https://github.com/rpflorence/ember-localstorage-adapterをご覧ください

于 2013-02-11T17:39:53.060 に答える