Javascript Ember.js从存储区计算的属性
我试图从服务器获取REST get请求返回的对象的简单计数,以便在Ember.js中的另一个控制器中使用 因此,我需要向服务器发出额外的请求。基本上,这是我的代码,它几乎可以工作。。但还不完全是。也许有人能找出原因 它返回一个PromiseArray,这就是我使用的原因。然后访问属性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
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,这样你就可以在上下文中看到我在说什么。