Javascript Ember.js:在一个路由/模板中获取多个模型(hasMany)
一项作业可以有许多提交。我正在尝试使用/assignments/1路径将提交的内容显示在作业模板中。(显示分配中的数据按预期工作。) 我使用的是Ember 2.10和Ember data 2.10。 app/router.js:Javascript Ember.js:在一个路由/模板中获取多个模型(hasMany),javascript,node.js,express,ember.js,json-api,Javascript,Node.js,Express,Ember.js,Json Api,一项作业可以有许多提交。我正在尝试使用/assignments/1路径将提交的内容显示在作业模板中。(显示分配中的数据按预期工作。) 我使用的是Ember 2.10和Ember data 2.10。 app/router.js: this.route('assignments', function() { this.route('assignment', {path: ':assignment_id'}); }); app/routes/assignments/assignme
this.route('assignments', function() {
this.route('assignment', {path: ':assignment_id'});
});
app/routes/assignments/assignment.js:
import Ember from 'ember';
export default Ember.Route.extend({
model: function(){
return Ember.RSVP.hash({
assignments: this.store.findRecord('assignment', params.assignment_id),
submissions: this.store.findAll('submission', params.assignment_id)
});
},
setupController: function(controller, models){
controller.set('assignment', models);
controller.set('submission', models);
}
});
import DS from 'ember-data';
export default DS.Model.extend({
title: DS.attr('string'),
ispublic: DS.attr('boolean'),
emailnotification: DS.attr('boolean'),
markdown: DS.attr('string'),
submission: DS.hasMany('submission')
});
app/models/assignment.js:
import Ember from 'ember';
export default Ember.Route.extend({
model: function(){
return Ember.RSVP.hash({
assignments: this.store.findRecord('assignment', params.assignment_id),
submissions: this.store.findAll('submission', params.assignment_id)
});
},
setupController: function(controller, models){
controller.set('assignment', models);
controller.set('submission', models);
}
});
import DS from 'ember-data';
export default DS.Model.extend({
title: DS.attr('string'),
ispublic: DS.attr('boolean'),
emailnotification: DS.attr('boolean'),
markdown: DS.attr('string'),
submission: DS.hasMany('submission')
});
app/models/submission.js:
import DS from 'ember-data';
export default DS.Model.extend({
title: DS.attr('string'),
markdown: DS.attr('string'),
assignment: DS.belongsTo('assignment')
});
app/templates/assignments/assignment.hbs:
{{assignment.title}}
{{#each submissions as |submission|}}
{{submission.title}}
{{/each}}
我正在使用JSONAPI格式的来自ember数据的http模拟。服务器不会执行额外的请求来获取与分配相关的所有提交。我不确定是否需要执行额外请求:
server/mocks/assignments.js:
module.exports = function(app) {
var express = require('express');
var assignmentsRouter = express.Router();
var assignments = {
"data": [
{
"type": "assignments",
"id": "1",
"attributes": {
"title": "Deze is niet public",
"ispublic": "false",
"emailnotification": "false",
"markdown": "This is the markdown of the first assignment"
},
"relationships": {
"submissions": {
"data": [
{ "type": "submissions", "id": "1" }
]
}
}
},
{
"type": "assignments",
"id": "2",
"attributes": {
"title": "Deze is public",
"ispublic": "true",
"emailnotification": "false",
"markdown": "This is the markdown of the second assignment"
},
"relationships": {
"submissions": {
"data": [
{ "type": "submissions", "id": "2" },
{ "type": "submissions", "id": "3" }
]
}
}
}]
};
assignmentsRouter.get('/:id', function(req, res) {
//No need for this apparantly ember data caches the findAll request which gets all the assignments...
});
app.use('/api/assignments', assignmentsRouter);
};
server/mocks/submissions.js:
module.exports = function(app) {
var express = require('express');
var submissionsRouter = express.Router();
var submissions = {
"data": [
{
"type": "submissions",
"id": "1",
"attributes": {
"username": "Myusermane",
"title": "Pretty title",
"markdown": "Some text"
},
"relationships": {
"assignments": {
"data": [
{ "type": "assignments", "id": "1" }
]
}
}
},
{
"type": "submissions",
"id": "2",
"attributes": {
"username": "Somebody",
"title": "Nice title",
"markdown": "Some other text"
},
"relationships": {
"assignments": {
"data": [
{ "type": "assignments", "id": "2" }
]
}
}
},
{
"type": "submissions",
"id": "3",
"attributes": {
"username": "Whoelse",
"title": "Test",
"markdown": "Text"
},
"relationships": {
"assignments": {
"data": [
{ "type": "assignments", "id": "2" }
]
}
}
}]
};
submissionsRouter.get('/', function(req, res) {
res.send(submissions);
});
app.use('/api/submissions', submissionsRouter);
};
还有什么不起作用?你期望什么,但是你有不同的结果?我期望来自提交的数据显示在分配模板内的循环中。没有错误可查看,但在进入作业/1之前,我必须转到/assignments。否则我会得到这个错误。处理路由时出错:assignments.assignment参数未定义引用错误:未定义参数。(我认为这不相关)