2

私はこのようなルートを持っています:

App.RandomThingRoute = Ember.Route.extend({
  model: function() {
    return App.Thing.find("random");
  }
});

/things/randomAPI エンドポイントに移動します。

コントローラーにもアクションがあります:

App.RandomThingController = Ember.ObjectController.extend({
  displayRandomThing: function() {
    return this.content.reload();
  }
});

テンプレートにランダムなものをリロードします。

私はEmber.js(またはMVCフロントエンドフレームワーク)から始めたばかりで、疑問や質問はほとんどありません:

  1. まず第一に、これは正しい方法ですか ( this.content.reload())?
  2. old_thing私の API エンドポイントは、現在表示されているものとは異なるランダムなものを取得できるパラメーターを受け入れます: /things/random?old_thing=Something. Ember.jsでこれを実装する最も慣用的/正しい方法は何ですか? old_thingこれをfind()andに渡す方法はreload()? ここで提案されているように、ビューを使用する必要があります: Preferred way to retrieve data from a template in EmberJS ?

関連するドキュメントを見つけるのに苦労しましたember-data(すべてが時代遅れに感じます)。

4

2 に答える 2

0

私はこの問題の答えを探しに来て、ここに行き着きました。モデルのランダムなレコードを見つける必要があり、ストアのfindメソッドを呼び出す方法がわかりませんでした。

ember-data sourceを調べた後、オブジェクトをfindメソッドに渡すと、ストアがfindByIdからfindQueryに切り替わることがわかりました。

そのため、単一のランダムオブジェクトのfindを呼び出す適切な方法は次のようになると思いました。

App.Thing.find({random:true, old_thing: 'oldThing', limit:1});

これらはクエリパラメータに変換され、受け入れるようにAPIの「Thing」エンドポイントを変更する必要があります。

api/thing?random=true&old_thing=oldThing&limit=1

ランダムフラグと制限をパラメーターとして渡すことができるということは、ランダムレコードを見つけるための追加のルートでAPIを混乱させる必要がないことを意味します。

これが最も慣用的な方法であるかどうかはわかりませんが、私が選択した方法です。

編集:

ちなみに、このようにクエリを実行する場合、EmberDataと組み合わせたAPIは1つの要素を持つ配列を返す必要があります。これで、呼び出しは非同期で行われるため、「find」を呼び出した直後に要素が定義されないため、アイテムがロードされたら、コントローラーのコンテンツを更新するオブザーバーを追加する必要があります。

私のトラックコントローラーでは、このようなものがあります。

, randomiseTrack: function(){
        var _this = this
        var currentTrackId = this.get('content.id')
        var loadingTrackList = App.Track.find({
            random:true, 
            current_track_id: currentTrackId, 
            limit: 1
        });
        loadingTrackList.addObserver("isLoaded", function(){
            _this.set('content', loadingTrackList.materializedObjectAt(0));
        });
}
于 2013-03-09T00:01:08.940 に答える
0

1 - コントローラーでこの方法でコンテンツをリロードします。

reloadContent: function(){
    this.set('content', App.Thing.find("random"));
}

2 - パラメータを GET に渡したい場合 (RESTAdapter を使用していると仮定)、ハッシュを使用して渡すことができます。

App.Thing.find({old_thing: 'oldThing');

しかし、ここには「怪しい」ものがあります。Model.find には ID またはハッシュが必要です。あなたの「ランダム」はどちらにも似ていません。

「ランダム」で指定するため、IDを指定するときにパラメータを送信できるかどうかはわかりません。単一のアイテムを取得したいことを指定したが、アイテムをフィルタリングするためにハッシュも送信しているため、それはちょっと間違っているように感じます。(それはあなたの意図ではありません)

于 2013-01-31T09:25:19.793 に答える