gpt4 book ai didi

ember.js - Ember-data 模型计算值,返回值而不是 promise

转载 作者:行者123 更新时间:2023-12-05 00:28:33 27 4
gpt4 key购买 nike

我有一个名为 survey 的 ember 模型, question , 和 response . survey s 有多个 question s,有多个 response s。每个response有一个属性 count .

我如何设置 total_response_count survey 中的计算值模型?在 emberjs 1.0.0 中,questions在 DS.PromiseArray 中(由于 async: true),所以当我返回计算值时,它在我的模板中显示为一个对象而不是一个值。

我可以轻松访问 responses来自 question模型因为 responses嵌入在 question .但是,Ember 会自动为 questions 做出 promise 。引用 survey因为{异步:真}。

调查模型:

App.Survey = DS.Model.extend({
title: DS.attr('string'),
owner_id: DS.belongsTo('user'),
questions: DS.hasMany('question', {async:true}),

total_responses: function() {
var question_cb = function(prevValue, item) {
return prevValue + item.get('total_responses');
};

return this.get('questions').then(function(questions){
return questions.reduce(question_cb, 0);
});
}.property('questions')
});

问题模型:
App.Question = DS.Model.extend({
survey: DS.belongsTo('survey'),

question: DS.attr('string'),

responses: DS.hasMany('response'),

total_responses: function() {
var response_cb = function(prevValue, item) {
return prevValue + item.get('count');
};

return this.get('responses').reduce(response_cb, 0);
}.property('responses')
});

响应模型:
App.Response = DS.Model.extend({
response: DS.attr('string'),
count: DS.attr('number'),

question: DS.belongsTo('question')
});

我正在使用 ember-1.0.0 和 ember-data 1.0 beta-2。

最佳答案

我也在 Github 上问过这个问题,并得到了 Yehuda Katz 的回复:

你可以尝试这样的事情:

App.Survey = DS.Model.extend({
title: DS.attr(),
owner: DS.belongsTo('user'),
questions: DS.hasMany({ async:true }),

totalResponses: Ember.arrayComputed('questions', {
initialValue: 0,
addedItem: function(accum, item) {
accum += item.get('totalResponses');
},
removedItem: function(accum, item) {
accum -= item.get('totalResponses');
}
})
});

当问题解决时,totalResponses 中的 addedItem 回调将针对已解析数组中的每个项目调用一次。

关于ember.js - Ember-data 模型计算值,返回值而不是 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18835533/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com