0

我正在尝试从服务器获取 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}}在视图模板中使用时,我得到[object Object]的不是整数。

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

谢谢

4

2 回答 2

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')
})
于 2014-02-23T20:03:02.410 回答
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()
})
于 2014-09-18T21:09:27.533 回答