Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ember.js从存储区计算的属性_Javascript_Ember.js_Ember Data_Promise_Computed Values - Fatal编程技术网

Javascript Ember.js从存储区计算的属性

Javascript Ember.js从存储区计算的属性,javascript,ember.js,ember-data,promise,computed-values,Javascript,Ember.js,Ember Data,Promise,Computed Values,我试图从服务器获取REST get请求返回的对象的简单计数,以便在Ember.js中的另一个控制器中使用 因此,我需要向服务器发出额外的请求。基本上,这是我的代码,它几乎可以工作。。但还不完全是。也许有人能找出原因 它返回一个PromiseArray,这就是我使用的原因。然后访问属性 App.TestController = Ember.ObjectController.extend({ totalCount: function() { return this.store

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

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

它返回一个PromiseArray,这就是我使用的原因。然后访问属性

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],而不是整数

另外,我是否正确地观察了问题属性?如果该值在其相应控制器中发生变化,该值是否会更新


谢谢

您看到的问题是,您返回的是一个承诺,因为房产价值和车把不会为您评估该承诺。您需要做的是创建一个单独的函数来观察问题,然后在那里调用您的存储来更新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')
})
或者,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()
})

可能是重复的谢谢你,卡尔·约翰!这实际上是有道理的。但是,尽管console.log输出了所需的值,视图仍然没有得到更新的事件。我遵守了正确的财产吗?我是否需要隐式调用totalCountUpdate?在我看来,我仍然在使用{{totalCount}},但它被固定在0。这让我觉得我应该以某种方式观察totalCount属性?因为它是正在更改的。视图将自动为totalCount创建一个观察者。上面的代码看起来不错。当问题发生更改时,将调用totalCountUpdate,它反过来应该调用set-totalCount,这将触发UI应该响应的属性更改通知。你能添加一个jsbin来重现这个问题吗?你不需要显式调用totalCountUpdate,这就是.observes'question'部分的作用,当问题被更改时,这个方法将运行。正如Miguel所说,一个JSBin和一个重现问题的示例将有助于诊断这个问题。请查看我的更新。我在线上传应用程序而不是jsbin,这样你就可以在上下文中看到我在说什么。