2016-09-19 7 views
0

あなたがモデルに計算されたプロパティを持つ一般的なシナリオで始まるのをしてみましょう:Emberjsキャッチ= 22 - hasManyの関連するオブジェクトを数える親計算プロパティを

モデル/ coney.js

bunniesTotal: Ember.computed.alias('babyBunnies.length') 

は言うことができますアプリケーションへのエントリポイントはすべてConeysを示すインデックスページである:

routes/coneys/index 

のみ50が表示されるので、APIは、すべてのConeysを返しますが、それがページングます

各コニー(親ウサギ)にはすべての子供が付いています(それは少数しかありません。彼らは唯一のものですからlittl'uns - すなわち。小さなペイロード!)

したがって、bunniesTotalは常に正確で、coneys/indexページのリストの各Coneyに表示されます。素晴らしい、すばらしい、Emberのチュートリアルのどこにでも見られる共通の例です。 エンバーの良さ。

さらにエンバーの良さ - 新しいBabyBunnyはエンバー ストアにあるため、彼らは、戻っ /coneyes/indexに来たときに、ユーザーが訪問 /coneys/new.jsと新しい Coneyといくつかの BabyBunniesを追加した後、ユーザーは、自動的に上記の bunniesTotalアップデートが表示されます ウォーレン。 Watership Down、さあ!

今度は、将来に向かって、 データ ウォーレンを調整しましょう。ええとああ。

今Coneysは(図を行く、ええ、ウサギ!)の子供たちと、おそらくあまりにも孫の何千もの数千を持っている

それはすべてのためのすべてのBabyBunniesをロードするために、coneys/indexページに、今、意味がありません。最初のヒット曲は50曲。良くない。

APIを変更してBabyBunniesを削除して、それぞれConeyが個別に要求するようにしてください(例:coneys/editに行く場合など)。

...カウントについてはどうしますか?今、クライアントは、各親が持つ子供の数を知らない。

Emberの代わりにAPIの各親にプロパティを含めることができます。これで、サーバー上の子供を数え、その合計をEmberに送信します。たぶんmeta.children_totalまたはモデル上のプロパティ。うんいいね。

ただし、ユーザーがクライアントに子を追加すると、合計は自動的に更新されません。 Ember goodnessを失ってしまい、インデックスページがユーザーの視点で「劣化」しています。

ユーザーは、新しい「子」を追加してconeys/indexにリダイレクトされた後、合計更新が表示されません。彼らは何かが間違っていると思うでしょう。何が新しい 赤ちゃんのウサギに起こった 子供私はちょうど作成しましたか?

そのような小さな時間旅行のエッセイの後、ここに質問があります。

このCatch-22を解決するEmberの方法はありますか?

子を追加した後、親をバックグラウンドでリフレッシュすることがあります。または親のメタデータ、または他のEmberの魔法を要求する方法?

私はds-referencesとその機能で起こったdiscussionを見ましたが、この問題の推奨される解決策が何であるかを知る助けにならなかった。そのDS-参考文献に


UPDATE


この文はありリンク:

レコードまたは関係について、サーバが提供するメタデータを取得このコード:

var meta = post.hasMany('comments').meta(); 
console.log(`${commentIds.length} comments out of ${meta.total}`); 

これは、サーバーから提供されたBabyBunnies(子)にメタベースを持つことを意味しています。 meta.totalはすべての子供の合計となります。

しかし、それは、さらに2つの質問につながる:

エンバーは、新しい合計を取得しない方法
  1. ユーザーが新しい赤ちゃんを追加し、ストア/ウォーレンと ので、それをサーバーに保存し、?それは単に合計を取得するだけの背景マジック を行うのですか?私はそうではないと思われます。 私は手動でBabyBunniesエンドポイントを要求して、ちょうど新しい合計を にする必要があります。

  2. は何というメタ合計は、実際に '生' の合計ではありませんが、この場合:

    meta.totalFemaleBabyBunnies

    meta.totalMaleBabyBunnies

私はどのようにエンバーが表示されませんBabyBunniesエンドポイントの更新をトリガーすることなく、このような合計を更新することができます(これは、新しいBabyが追加されるたびにそのことを意味します)。

Haあなたはこの問題を抱えていましたか?もしそうなら、あなたはそれを解決するために何をしましたか?

答えて

0

私は、オス/メスの赤ちゃんバニーの合計を親のアクティブレコードシリアライザに直接追加することで解決しました(つまり、親モデルのEmberのプロパティです)。メタル・トータルを分離しておらず、dsリファレンスを使用する必要もありません。

私は、最もシンプルで直接的な解決策が「うまくいく」かどうかを見たいと思っていました。

新しい赤ちゃんがAPIに投稿されると、男性/女性の数が自動的に再計算され、親ペイロードの一部としてEmberに返されます。ブーム、コイ/インデックスページのカウントが更新されました。

魅力的な作品です。

私は、地元のほのぼの5歳のMacAir(Core i5 1.7GHz/4GB Ram)で1,500 BabyBunnies(Postgresを使用)でテストしました。 2つのカウントを更新すると、ページの読み込みに約1ミリ秒しか追加されません。だから、目の瞬きの1/300。

私は決して1,500 BabyBunniesを持っていないので、この解決法はそれ以上のものです。

関連する問題