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?因为如果您侧载数据,则不必等待数据,因此没有需要等待的请求,并且在您进入路由后不会加载任何内容。