所以我是Ember的新手,并尝试找出设置依赖于相关模型数据的计算属性的最佳方法。我将在FYI以下的模型中加入。
我想将computed属性设置为异步结果(desiredOutcome)。 我的问题我是怎么做到的?或者使用观察者更合适,如question。
score: function() {
var self = this;
var allscores = this.get('model.scores');
//Find the scoreRecord that has the appropriate objective id (in this case just 1)
var scoreRecord = allscores.find(function(item){
var scoreID = item.get('id');
return self.store.find('score', scoreID).then(function(scoreRecord){
var objID = Number(scoreRecord.get('objective.id'));
if (objID === 1){return true;}
});
});
//Return the scoreRecord's score attribute
var scoreID = scoreRecord.get('id');
return this.store.find('score', scoreID).then(function(score){
var desiredOutcome = score.get('score');
console.log(desiredOutcome);
return desiredOutcome;
});
}.property('model.@each.scores', 'selectedObjective'),
对变量名称选择不当等道歉......
我的模特:
学生
scores: DS.hasMany('score', {async: true}),
name: DS.attr('string')
目标
name: DS.attr('string'),
scores: DS.hasMany('score', {async : true})
评分
scoreResult: DS.attr('number'),
objective: DS.belongsTo('objective', {async: true}),
student: DS.belongsTo('student', {async: true})
-------------的更新 ---------------
JSBin here。所以我喜欢的是返回其中一个分数,即在控制台中记录的1或2分,作为计算属性"得分"。但我假设我只是回到了一个未解决的承诺 - 没有经验的承诺 - 我如何适应以便它解决?
- 我也一直认为,对我采取不同的做法可能会更好。我可能会考虑使用适当的"得分"来创建一个具有模型的组件。如果有问题,我会更新一些细节。
答案 0 :(得分:1)
当我今天在同样的事情上挣扎时,似乎答案是使用 DS.PromiseObject
。
首先,请将其包括在内:
import DS from 'ember-data';
然后你创建你的计算属性,如:
property: Ember.computed('id', function(){
return DS.PromiseObject.create({
promise: this.get('store').findRecord('account', this.get('id')).then((data) => {
return 'Mr. ' + data.get('name');
})
});
})
最后在您的模板中,您可以使用内容访问结果(这是捕获):
{{property.content}}
这就是全部:)在这种特殊情况下,当您更改它将解析的ID并显示一个新名称时。
答案 1 :(得分:0)
property('model.scores.@each', 'selectedObjective'),