0

私は Ember Data の初心者で、これまでに行ったのは FIXTURE データだけですが、今日は本格的に卒業しようとしており、モデルと API を接続する方法について十分に知らないことに気付きました。署名を呼び出します。

具体的には、 endpoint を呼び出せるようにしたいと考えていますGET /activities/[:user_id]/[date]。これにより、「アクティビティ」オブジェクトの配列がロードされますが、特定の日付のオブジェクトのみがロードされます。APIのディレクトリを次のようにオフセットできることを知っています:

 DS.RESTAdapter.reopen({
   namespace: 'api'
 });

私の場合、apiプレフィックスは適切です。次のようなルートを設定することで、日付コンポーネントを解決できるはずだと思います。

this.resource('activities', { path: '/activities' }, function() {
    this.route('by_date', {path: '/:target_date'});
});

user_id上記は、コンポーネントを URL 署名に組み込む方法について完全に途方に暮れているため、経験に基づいた推測にすぎません。誰でも助けることができますか?基本的な Ember Data のユースケースの優れたチュートリアルや例はありますか?

また、次にこれに出くわすことがわかっているため、URL 文字列 (別名、GET /foobar?something=value) にパラメーターを追加する方法と、URL 自体にパラメーターを追加する方法 (上記のように) を比較します。

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 更新 -=-=-=- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

@intuitivepixel からの提案を実装しましたが、まだいくつかの問題があります ...

userIdまず、との値をハードコーディングしようとしましたdateBy:

ルーター:

this.resource('activities', { path: '/activities' }, function() {
    this.route('by_date', {path: '/:user_id/:by_date'});
});

ルート:

App.ActivitiesByDateRoute = Ember.Route.extend({  
    serialize: function(activity) {
      return {
        userId: 1,
        dateBy: "2013-07-01"
      };
    }     
});

悲しいことに、それはうまくいきませんでした。理由は理解できたと思いますが、これを簡単に修正する方法はありませんが、URL: にパラメータを手動で入力したときのほうが気がかりでしたhttp://restful.service.com/api/activities/1/2013-07-01。結果は私にとって非常に驚くべきものです。

  • 最初のデバッグ メッセージは成功を示唆しています。
  • ただし、実際にはネットワーク リクエストが行われないため、これは正しくありません。
  • ブラウザをリロードすると、アクティビティが表示されますが、驚いたことに、指定されたユーザーも検索されます。うーん。ユーザー 1 は正常に引き戻されました。
  • GET /activitiesただし、アクティビティは、このエンドポイントが機能するためにユーザーと日付修飾子が必要なため、失敗する単なる呼び出しです。これらがリクエストに含まれていなかったのはなぜですか?
4

1 に答える 1

0

APIのディレクトリを次のようにオフセットできることを知っています:

その場合は、API の別の URL を設定することもできます。

DS.RESTAdapter.reopen({
  url: 'http://myapihost.com',
  namespace: 'api'
});

これにより、次のような URL が生成されます。http://myapihost.com/api/

上記は、user_id コンポーネントを URL 署名に取得する方法について完全に途方に暮れているため、経験に基づいた推測にすぎません。

例に従って動的セグメントを追加すると、user_id次のルーター マップ定義があるとします。

this.resource('activities', { path: '/activities' }, function() {
  this.route('byDate', {path: '/:user_id/:target_date'});
});

これはあなたの{{linkTo}}ヘルパーです:

{{#each activity in model}}
  {{#linkTo 'activities.byDate' activity}}
{{/each}}

複数の動的セグメントから URL を作成するには、ルートのserialize関数にフックして、URL に必要な動的セグメントから構成されたハッシュを返します。

App.ActivitiesByDateRoute = Ember.Route.extend({
  serialize: function(activity) {
    return {
      user_id: activity.get('userId'),
      target_date: activity.get('targetDate')
    }
  }
});

上記のコードは、リンクがクリックされ/activities/[userId]/[targetDate]たときのような URL を生成します。{{linkTo}}この例では、URL を作成するために必要なプロパティがActivityモデルで使用できることを前提としています。

また、次にこれに出くわすことがわかっているため、URL 文字列 (別名、GET /foobar?something=value) にパラメーターを追加する方法と、URL 自体にパラメーターを追加する方法 (上記のように) を比較します。

この種の URL クエリは、ember フレームワークではまだサポートされていませんが、https : //github.com/alexspeller/ember-queryのような不足している機能に対処しようとする適切な回避策/プロジェクトがあります。いつかマージされ、すぐにそれらも残りますが、当面は上記のライブラリを使用してカスタムクエリをサポートできます. ライブラリがマージされたかどうかの現在のステータスについては、http: //discuss.emberjs.com/t/query-string-support-in-ember-routerを参照してください。議論が進行中です。

それが役に立てば幸い。

于 2013-08-09T23:04:39.620 に答える