Mar*_*tin 4 handlebars.js ember.js ember-data
我有以下三种型号:
ConversationApp.Post = DS.Model.extend(
body: DS.attr()
replies: DS.hasMany('reply', async: true)
author: DS.belongsTo('user', async: true)
likedBy: DS.hasMany('user', async: true)
)
ConversationApp.Reply = DS.Model.extend(
body: DS.attr()
post: DS.belongsTo('post')
author: DS.belongsTo('user', async: true)
likedBy: DS.hasMany('user', async: true)
)
ConversationApp.User = DS.Model.extend(
firstName: DS.attr()
lastName: DS.attr()
)
Run Code Online (Sandbox Code Playgroud)
我的索引路由进行此调用:
ConversationApp.IndexRoute = Em.Route.extend(
model: (args) ->
@store.find('post', page: 1) # => /api/v1/posts?page=1
)
Run Code Online (Sandbox Code Playgroud)
在进行该呼叫之后,Ember开始获取第一页所需的所有用户 - 在第一页上共有17个(!)不同的用户请求(具有10个帖子).以下是Ember向服务器发出的3个请求示例:
我希望Ember只提出一个请求,请求第一页所需的所有用户:
把手文件如下所示:
{{#each}}
{{author.firstName}}
{{#each likedBy}}
[... removed for brevity ...]
{{/each}}
{{#each replies}}
{{author.firstName}}
{{#each likedBy}}
[... removed for brevity ...]
{{/each}}
{{/each}}
{{/each}}
Run Code Online (Sandbox Code Playgroud)
我怎么能做到这一点?
我知道这是一个旧线程,但这是一个使用的解决方案DS.RESTAdapter.
实现这一目标非常容易.你必须做的唯一的事情被设置coalesceFindRequests为true,就像这样:
App.ApplicationAdapter = DS.RESTAdapter.extend({
coalesceFindRequests: true
});
Run Code Online (Sandbox Code Playgroud)
或者如果您使用的是Ember CLI
// app/adapters/application.js
import DS from 'ember-data';
export default DS.RESTAdapter.extend({
coalesceFindRequests: true
});
Run Code Online (Sandbox Code Playgroud)
您可以在DS.RESTAdapter api文档中阅读有关它的更多信息
祝好运!:)