Javascript Ember 2,当原始响应中包含ID时,显示一条加载消息
我在代码中经常使用:Javascript Ember 2,当原始响应中包含ID时,显示一条加载消息,javascript,performance,ember.js,handlebars.js,ember-data,Javascript,Performance,Ember.js,Handlebars.js,Ember Data,我在代码中经常使用: {{#each model.posts as |post|}} <div>post.title</div> {{else}} <div>Loading the posts...</div> {{/each}} 我使用的是余烬数据,我的模型是: 类别 name: DS.attr('string'), posts: DS.hasMany('post') 发布 commented: DS.attr('string
{{#each model.posts as |post|}}
<div>post.title</div>
{{else}}
<div>Loading the posts...</div>
{{/each}}
我使用的是余烬数据,我的模型是:
类别
name: DS.attr('string'),
posts: DS.hasMany('post')
发布
commented: DS.attr('string'),
comments: DS.attr('number'),
category: DS.belongsTo('category')
也许我会创建一个余烬旋转,我在使用余烬旋转上的余烬数据模拟我的问题时遇到了问题…使用“链接”
从评论中我了解到,您不清楚链接是如何工作的。这相当简单。该类别的有效负载应如下所示:
{
"data": {
"id": "1",
"type": "categories",
"attributes": {
"name": "Books"
},
"relationships": {
"posts": {
"data": [{
"id": "14",
"type": "posts"
}, {
"id": "15",
"type": "posts"
}, {
"id": "20",
"type": "posts"
}]
}
}
},
"included": [{
"id": "14",
"type": "posts",
"attributes": {
"commented": true,
"comments": 10
}
}, {
"id": "15",
"type": "posts",
"attributes": {
"commented": false,
"comments": 10
}
}, {
"id": "20",
"type": "posts",
"attributes": {
"commented": false,
"comments": 10
}
}]
}
{
"data": {
"id": "1",
"type": "categories",
"attributes": {
"name": "Books"
},
"relationships": {
"posts": {
"links": {
"related": "/posts?category_id=2"
}
}
}
}
}
余烬数据将自动对此进行解释,以便当您获得计算属性model.posts
,它将向/posts?category_id=2
发出请求
异步加载
由于在路线的model()
钩子中加载了类别,因此在呈现模板时,承诺已经加载。因此,现在的加载帖子…
模板只有在类别没有帖子时才会显示,在加载时不会显示。所以现在看来,这是毫无意义的
如果确实要显示加载动画,则必须将类别加载到控制器上的计算属性中,而不是路径的model()
钩子中。大概是
export default Ember.Controller.extend({
...
category: Ember.computed(
function() {
return this.store.query('category', {...});
}
),
...
});
然后可以在模板中查询承诺的状态。我们为此编写了一个Ember插件,但实际上我建议您改用它,因为它会保持更新,并且更加灵活
然后,您的模板将类似于:
{{#deferred-content category as |d|}}
{{#d.fulfilled}}
<div>post.title</div>
{{/d.fulfilled}}
{{#d.pending}}
<div>Loading the posts...</div>
{{/d.pending}}
{{/deferred-content}}
{{{#延迟内容类别为| d}}
{{{d.completed}
职务
{{/d.completed}
{{{d.pending}
正在加载帖子。。。
{{/d.pending}
{{/延迟内容}
谢谢亲爱的@yorbro,但这并不能解决我的问题,可能是因为这个()。简而言之:我不需要很多HTTP请求。只有一个类别(模型)和一个(非阻塞,带加载消息)在第一个类别(模型)后用于帖子…你说你的帖子和你的类别(模型)一起被侧加载,所以你总共只有一个请求否?是的,这就是问题所在!我需要两个查询,一个用于类别,一个用于帖子。因为在模型中,我加载类别的东西,然后我可以加载帖子的东西。。。这就是我需要的。。。我认为没有计算属性,只需使用余烬数据进行查询,并使用Rails执行良好的侧加载策略。我尝试在一个查询中使用如此多的ID查询合并FindRequests
,但我对此不太满意,然后我尝试“链接”关系,但我不明白它们是如何工作的。网上的文档不是很好…抱歉我现在又读了一遍。我的意思是,如果我删除rails控制器和序列化程序中的include,会有很多请求。我更新了我的答案,解释了如何在响应中使用链接。这将是最好的解决方案。我真的怀疑这是您的服务器的实际响应。通过此响应,您没有想要指示的状态。看我的。您是否可以验证您是否确实发送了包含的数组中的所有帖子以及您的数据,而不仅仅是id
s?因为如果您侧载数据,则不必等待数据,因此没有需要等待的请求,并且在您进入路由后不会加载任何内容。