Ember.js从商店计算财产

时间:2014-02-23 19:54:15

标签: javascript ember.js ember-data promise computed-values

我正在尝试从服务器获取REST请求返回的对象的简单计数,以便在Ember.js中的另一个控制器中使用

出于这个原因,我需要向服务器发出一个额外的请求。基本上这是我的代码,它几乎可以工作..但还不是。也许有人可以找出原因。

它返回一个PromiseArray,这就是我使用.then()访问属性的原因。

App.TestController = Ember.ObjectController.extend({
    totalCount: function() {
        return this.store.find('question', {test: this.get('id')}).then(function(items) {
            var count = items.get('content').get('length');
            console.log(count); // This actually logs correct values
            return count;
        })
    }.property('question')
})

它做了它想做的事情,我在console.log()中打印出正确的值,但当我尝试在视图模板中使用{{totalCount}}时,我得到了{{1}而不是整数。

另外,我是否正确地观察了[object Object]财产?如果值在其适当的控制器中发生变化,值会更新吗?

由于

2 个答案:

答案 0 :(得分:8)

您所看到的问题是因为您正在返回承诺,因为财产的价值和把手不会为您评估该承诺。您需要做的是创建一个单独的函数,观察question,然后在那里调用您的商店来更新totalCount属性。它会是这样的。

App.TestController = Ember.ObjectController.extend({
    totalCount: 0,
    totalCountUpdate: function() {
        var that = this;
        this.store.find('question', {test: this.get('id')}).then(function(items)     {
            var count = items.get('content').get('length');
            console.log(count);
            that.set('totalCount', count);
        })
    }.observes('question')
})

答案 1 :(得分:1)

或者totalCount可能会懒散地设置自己,如下所示:

App.TestController = Ember.ObjectController.extend({
    totalCount: 0,
    question: // evaluate to something,
    totalCount: function() {
        var that = this;
        that.store.find('question', {test: that.get('id')}).then(function(items)     {
            var count = items.get('content').get('length');
            that.set('totalCount', count);
        })
    }.observes('question').property()
})