1

抱歉,如果措辞不正确,很难解释。基本上我有一个项目列表,它们旁边有一个指定的日期。如果它们超过 30 分钟,那么它们会变红。完美运行,但不是实时的。需要刷新才能看到该项目变红。

{{#each callback in App.callbackController}}
    <tr>
        <td align="center" {{bindAttr style="callback.urgent"}}>{{callback.formatted_time}}</td>
    </tr>
{{/each}}

App.Callback = Ember.Object.extend({
    date_time: null,
    urgent: function()
    {
        current_time  = new Date().getTime();
        callback_time = new Date(this.get('date_time')).getTime();

        if(((callback_time - current_time) / 1000 / 60 * -1) > 30)
        {
            return 'color: #FFF; font-weight: bold; background: #'+Helpers.colours.red;
        } else {
            return 'color: #FFF; font-weight: bold; background: #'+Helpers.colours.green;
        }
    }.property('date_time')
});

无论如何要不断刷新紧急值?

4

2 回答 2

1

Richard Livsey 写了一篇精彩的博客文章,基本上添加了一个应用程序范围的时钟模型,该模型通过注入连接到所有控制器。然后,您的计算属性可以绑定到时钟属性并在适当的时间“唤醒”。

于 2013-03-12T21:45:44.497 回答
0

您的计算属性仅查看“date_time”属性,在您的示例中,它看起来像是创建项目的时间。

您可能应该在应用程序的某处(有意义的地方)添加一个“date_time_now”属性并将其添加到您的计算属性中。不确定 ember 是否具有内置的“now”属性,但使用 setTimeout() 设置自己应该不会太难。

编辑:

重新阅读我的答案,并意识到我没有尽可能地解释它。由于您的计算属性只查看 date_time (它永远不会更改),因此它将被评估一次并在此之后缓存,因为默认情况下会缓存计算属性。添加 date_time_now 属性并进行更新,每次更改 date_time_now 时都会强制重新计算。

于 2013-03-12T17:14:44.593 回答