我正在尝试从服务器获取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]
财产?如果值在其适当的控制器中发生变化,值会更新吗?
由于
答案 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()
})