Ember数据集合检索的“成功”或“完整”方法

时间:2013-05-28 15:08:10

标签: ember.js ember-data

在我的应用程序中,我有一个1到M的关系,如下所示:

Social.Message = DS.Model.extend({
    created: DS.attr("date"),
    text: DS.attr("string"),
    metrics: DS.hasMany("Social.Metric"),
});

Social.Metric = DS.Model.extend({
    label: DS.attr('string'),
    value: DS.attr('number'),
    message: DS.belongsTo('Social.Message'),
});

当Ember Data调用检索消息时,数据包如下所示:

[
    {
        "id": 13, 
        "created": "2013-05-20T21:35:56Z"
        "text": "You got to let the roots grow deep, and stop worrying about the leaves", 
        "metrics": [
            "reach-13", 
            "click-13"
        ]
    }
]

我们正在使用sideloading然后检索指标,其返回数据如下所示:

[
    {
        id: "reach-13",
        value: 3,
        label: "reached"
    },
    {
        id: "reply-13",
        value: 2,
        label: "reply"
    },
]

这个过程很有效,没有任何缺陷。但是因为可能存在大量消息,每个消息都有一组指标,所以显示指标的时间可以是3秒或更长。在每条消息上,我想添加一个加载微调器来代替指标,然后在返回该消息的指标后将其删除。我已经添加了微调器,但是一旦指标集合返回给客户端,就无法弄清楚如何删除它。

当将整个集合数据返回给客户端时,Ember是否在Controller上有一个事件或方法?

我知道Model lifecycle has hooks like this,但我不关心单个模型,我正在寻找更高的内容,针对整套指标(针对每条消息)

这是一个关于现在正在发生的事情的快速截屏视频。 http://screencast.com/t/CIx3Aikck3

1 个答案:

答案 0 :(得分:0)

每个MessageMetric模型实例都有自己的模型生命周期挂钩。此外,实现DS.ManyArray关系的DS.hasMany s也具有isLoaded属性(整个数组一个)。

所以钥匙在你的车把模板中。将度量标准包含在isLoaded条件中,而不是整个消息中。在消息的上下文中:

<div>{{created}}</div>
<div>{{text}}</div>
<div>
  {{#if metrics.isLoaded}}
    {{#each metric in metrics}}
      {{! Display metric here. }}
    {{/each}}
  {{else}}
    <img src='spinner.gif'>
  {{/if}}
</div>

ManyArray还有一个didLoad事件,当isLoaded设置为true时会被触发,但对于您所描述的内容,您不应该需要它。