我遇到了ember和模型的问题,因为我想使用Express从Mongoose API返回一个JSON,问题是路由正确地返回了json,但是当我试图在前端抓住它(Ember),它像null一样返回。
在我的Ember路线中,我有以下内容:
import Ember from 'ember';
export default Ember.Route.extend({
model: function(params){ //i'm getting params from the url as a paremeter
return Ember.RSVP.hash({
questions: this.store.find('examGroupQuestion/show-q', params.questionsGroup_id)
});
}
});
重要的是这条路线是来自另一条路线的孩子,接下来我会告诉你路由器:
import Ember from 'ember';
import config from './config/environment';
const Router = Ember.Router.extend({
location: config.locationType,
rootURL: config.rootURL
});
Router.map(function() {
this.route('examGroupQuestion',function() {
this.route('showQ',{
path: 'showQ/:questionsGroup_id'
});
});
});
export default Router;
最后这是我的模特:
import Model from 'ember-data/model';
import attr from 'ember-data/attr';
export default Model.extend({
/* the atributte array it's defined in a transform */
description: attr('string'),
matrix_eval: attr('array'),
level: attr('string'),
rows: attr('array'),
randomize_row: attr('boolean'),
columns: attr('array'),
randomize_col: attr('boolean'),
});
有了这个,我们正在尝试将json从路由模型传递给模板,但是记录总是显示它为空,就像在下一个图像中我们可以看到REST服务器响应和错误:
在REST服务器中,我有这条路线:
router.route('/examGroupQuestion/showQs/:qid').get(function(req,res){ questions_group.getQuestions(req,res, req.params.qid); });
在api我有以下内容:
module.exports.getQuestions = function(req,res,id){
QuestionGroup.findById(id).exec(function(err, questiongroup){
if(err)
{
res.send(err);
}
function done(result){
res.json({questionsGroup:result});
}
var result = [];
var l = questiongroup.questions.length;
for(var j = 0; j < l; j++)
{
(function(j){
Questions.findById(questiongroup.questions[j].id).exec(function(err, questions){
if(err)
{
res.send(err);
}
result.push(questions);
if(l === j+1)
{
done(result);
}
});
})(j);
}
});
};
有谁知道为什么会发生这种情况,感谢任何帮助。
答案 0 :(得分:0)
findRecord(modelName,id,options)承诺
此方法返回给定类型和id组合的记录。对于给定的类型和id,findRecord
方法将始终使用相同的对象解析其promise。 findRecord
方法将始终返回将使用记录解析的承诺。
将路线改为
import Ember from 'ember';
export default Ember.Route.extend({
model(params) {
return this.store.findRecord('examGroupQuestion/show-q', params.questionsGroup_id);
}
});
确保这是正确的型号&#39; examGroupQuestion / show-q&#39;
如果该记录尚未可用,则商店将要求适配器的find
方法查找必要的数据。如果记录已存在于存储中,则它取决于返回的promise解析时的重新加载行为。