1

やや関連する質問: Ember.js: コレクションからランダムな要素を取得する

randomThingルートとルートの 2 つのルートがありthingsます。

前者は API からランダムなものを表示します ( GET /things/random) (「別のランダムなものを取得する」ボタンがあります)、後者はすべてのものを表示します: ( GET /things)。

問題は、クリックするたびに新しいものが表示され、ルートGet another random thingに行くたびに、この新しく表示されたランダムなものがコレクションに追加されることです...recipes

ランダムなものを取得するアクションfind("random")は、関連する質問で提案されているように実行され、this.contentこの値に設定されます。

ここで何が問題なのですか?

編集:

私が使用ember-dataしていて、私のルートは次のようなものです:

App.ThingsRoute = Ember.Route.extend({
  model: function() {
    return App.Thing.find();
  }
});
4

1 に答える 1

1

問題は、[別のランダムなものを取得] をクリックするたびに新しいものが表示され、レシピ ルートに移動すると、この新しく表示されたランダムなものがコレクションに追加されることです...

これは予期される動作です。App.Thing.find()単に API を照会して結果を返すだけではありません。代わりに、find() は、ember が知っているすべてのものを含む配列を返します。これには、find() への過去の呼び出しによって返されたオブジェクト、App.Thing.createRecord() を介してクライアント側で作成されたオブジェクト、およびもちろん を介してクエリされた個々のオブジェクトが含まれますApp.Thing.find('random')。この配列を返した後、find() は別の API 呼び出しを開始し、それが追加のレコードを返す場合、それらは配列にプッシュされます。

ここで何が問題なのですか?

それ自体が間違っているようには聞こえません。ランダムなものが ThingsRoute に表示されるのを防ぎたい場合は、すべての Thing を返すだけでなく、そのルートのモデルをフィルターに変更する必要があります。例えば:

App.ThingsRoute = Ember.Route.extend({
  model: function() {
    //Kick off query to fetch records from the server (async)
    App.Thing.find();

    //Return only non-random posts by applying a client-side filter to the posts array
    return App.Thing.filter(function(hash) {
      if (!hash.get('name').match(/random/)) { return true; }
    });
  }
});

実際の例については、このjsbinを参照してください

フィルターの詳細については、ember-data store-model-filter統合テストを読むことをお勧めします

于 2013-01-31T13:18:24.953 に答える