2016-06-20 3 views
1

おそらく私はEmberが怠惰なロードをどのようにしているのか誤解しているかもしれませんが、hasManyの関係の側面を指定しますが、可能な場合、もの。Emberをレイジー(非同期)にロードする方法hasMany

私はRESTAdapterを使用していますが、他のいくつかのオブジェクトと1対多の関係を持つ親オブジェクトがあります。親を見ると、子アウトレットとして表示したい子オブジェクトのリンクがあります。

例としては、次のようになります。

// brand.js 
export default Model.extend({ 
    name: attr('string'), 
    description: attr('string'), 
    dateCreated: attr('date'), 
    lastUpdated: attr('date'), 
    regions: hasMany('region', {async: true}) 
}); 

// region.js 
export default Model.extend({ 
    name: attr('string'), 
    dateCreated: attr('date'), 
    lastUpdated: attr('date'), 
    brand: belongsTo() 
}); 

私は/api/brands/1にアクセスすると、私は、次のJSONを返しています:

{ 
    "brand": { 
    "id": 1, 
    "dateCreated": 1466456255539, 
    "lastUpdated": 1466456255936, 
    "name": "Some Brand", 
    "description": "Voluptates odio nemo corrupti", 
    } 
} 

私は私のルートはそうのように定義されていますので、

this.route('brand', {path: '/brands/:brand_id'}, function() { 
    this.route('regions'); 
}); 

brand詳細画面では、私は{{outlet}}を持っていますregionsのリンクをクリックすると、そのブランドの地域を取得する必要があり、URLは/api/brands/1/regionsになります。私は一つの大きな結果内のすべてのデータを返す場合

すべてが動作し、私のregionsルータは、次のようになります。

export default Ember.Route.extend({ 
    model() { 
    return this.modelFor('brand').get('regions'); 
    } 
}); 

しかし、私は地域を遅延から正しくフェッチされることをそう何をするか分からない私API。それとも可能であれば。私はside loadingを読んでいますが、現在のところ、私のAPIは子供のためだけにIDを返しません。

+0

一方向にリンクするには、クエリのパラメータを追加することです: '{{#link-to" brand.regions "(query-params brand = model)}}' ' '。 [query-paramsのためのドキュメント](https://guides.emberjs.com/v2.5.0/routing/query-params/) – Jeff

+0

テンプレート内のどこでも 'regions'プロパティを使用すると、Emberはその関係のレコードを自動的にロードします。実際に地域を表示しているテンプレートを教えてください。 – GJK

+0

@GJK - 明日は仕事中ですが、それは少し意味があります。私は '{{brand.regions}} 'を経由してそれらを入手しているとは言えません。もし私がそうした方法でアクセスすれば、別の方法でクエリを実行します。私はそれのようなものを試して、報告して戻ってきます。 – Gregg

答えて

1

あなたの例では、ember.jsはロードする領域を知りません。

{ 
    "brand": { 
    "id": 1, 
    "dateCreated": 1466456255539, 
    "lastUpdated": 1466456255936, 
    "name": "Some Brand", 
    "description": "Voluptates odio nemo corrupti", 
    "regions": ["5", "9"] 
    } 
} 

その後、ID 5と9と領域をロードするか、あなたがそれらを直接埋め込むことができた:

{ 
    "brand": { 
    "id": 1, 
    "dateCreated": 1466456255539, 
    "lastUpdated": 1466456255936, 
    "name": "Some Brand", 
    "description": "Voluptates odio nemo corrupti", 
    "regions": [{ 
     "id": "5", 
     "name": "Hanover", 
     "dateCreated": "2016-09-25 18:39:18", 
     "lastUpdated": "2016-09-25 18:39:18", 
    },{ 
     "id": "9", 
     "name": "Cologne", 
     "dateCreated": "2016-01-19 11:59:18", 
     "lastUpdated": "2016-02-22 12:09:58", 
    }] 
    } 
} 

は、後者のためにhereを参照してくださいあなたのJSONは(非埋め込み)のいずれかである必要があります。

+0

それは私が恐れていたことのようなものです。私は、Emberが 'regions 'の親のために正しいURLを推測できることを期待していました。 '/ brands/1/regions'というAPIが現在どのように動作しているかを示します。現時点では、リストを引っ張ったときにすべての子どもを埋め込まなければならないので、問題があります(または、詳細ビューにいるときにブランドを再検索する方法を理解する)。 – Gregg

+0

私は、RESTアダプタがURLを介してhasMany関係を取得することもできるという印象を受けました。 [このサイト](http://thejsguy.com/2016/02/21/handling-nested-resources-in-ember-data.html)は同意しているようですが、私はEmber-Dataに慣れていませんもっと。 – GJK

関連する問題