Ember.js 添加具有多个关系的记录时出现问题
你好,谢谢你抽出时间回答我的问题 我有以下型号:Ember.js 添加具有多个关系的记录时出现问题,ember.js,ember-data,Ember.js,Ember Data,你好,谢谢你抽出时间回答我的问题 我有以下型号: App.Project = DS.Model.extend({ name: DS.attr('string'), project_teams: DS.hasMany('project_team'), }); App.ProjectTeam = DS.Model.extend({ val: DS.attr('number'), project: DS.belongsTo('project'), team:
App.Project = DS.Model.extend({
name: DS.attr('string'),
project_teams: DS.hasMany('project_team'),
});
App.ProjectTeam = DS.Model.extend({
val: DS.attr('number'),
project: DS.belongsTo('project'),
team: DS.belongsTo('team')
});
App.Team = DS.Model.extend({
project_teams: DS.hasMany('project_team'),
name: DS.attr('string')
});
ProjectTeam基本上是项目和团队之间的链接,它包含一些额外的元数据。一个项目可以有多个团队通过ProjectTeam模型来处理
我的ProjectController中有以下代码:
var project = store.createRecord('project', {
name: projectName
});
project.save().then(function(record){
Ember.run.next(function(){
for(var i = 0; i < valArr.length; i++){
var retTeam;
store.find('team', teamIds[i]).then(function(team){
Ember.run.next(function(){
retTeam = team;
console.log(team);
});
});
console.log(record);
var project_team = store.createRecord('project_team', {
project: record,
val: valArr[i],
team: retTeam
});
project_team.save().then(function(pt){
Ember.run.next(function(){
projectTeamIds.push(pt.get('id'));
if(i === sdeHeads.length){
record.set('project_teams', projectTeamIds);
record.save();
}
});
});
//
}
});
});
var project=store.createRecord('project'{
名称:项目名称
});
project.save().then(函数(记录){
Ember.run.next(函数(){
对于(变量i=0;i
首先,我需要添加一个项目对象。在那之后,我添加了多个ProjectTeam对象,我需要将它们绑定到新插入的项目Id。我一直在绞尽脑汁试图弄清楚为什么这几个小时都不起作用,但毫无用处。。我想知道你是否能发现我的错误
我可以添加项目对象,并将它们保存到数据库中。我还可以添加ProjectTeam对象,但它们不绑定到团队或项目。我检查了JSON,这些字段(项目和团队)为空:/
基本上,这应该是流程:
- 创建项目对象
- 获取项目id并添加多个ProjectTeam对象
var project = store.createRecord('project', {
name: projectName
});
for(var i = 0; i < sdeHeads.length; i++){
store.find('team', teamIds[i]).then(function(team){
var project_team = store.createRecord('project_team', {
sde_effort: sdeEffort,
team: team
});
project.get('project_teams').pushObject(project_team);
});
}
project.save();
var project=store.createRecord('project'{
名称:项目名称
});
对于(var i=0;i
另一种方法是创建一个项目对象,嵌入子对象,然后保存到数据库中。然而,这种方法也不起作用,因为现在项目团队根本没有添加到db中。store.find('team',teamIds[i])中的代码。然后(function(team){
根本不执行。要么有更简单的方法来执行,要么余烬还有一段路要走。真令人沮丧
感谢您的帮助!这里有一些异步问题。因此,这是一个循环,因此它将从3变为9,而不涉及99/99*部分。99和99*将在服务器返回结果和保存返回时执行,但不一定按顺序执行(99*可能在99之前执行,而更令人兴奋的是,循环的一次迭代中的99可能在另一次循环中的99之前执行(即retTeam和record将与您认为的工作方式不同步)。此外,您还将遇到循环关闭问题
valArr[i]
应该始终是出界的
1. project.save().then(function(record){
2. Ember.run.next(function(){
3. for(var i = 0; i < valArr.length; i++){
4. var retTeam;
5. store.find('team', teamIds[i]).then(
99. function(team){
99 Ember.run.next(function(){
99 retTeam = team;
99 console.log(team);
99 });
5. });
6. console.log(record);
7. var project_team = store.createRecord('project_team', {
7 project: record,
7 val: valArr[i],
7 team: retTeam
7 });
8. project_team.save().then(
99* function(pt){
99 Ember.run.next(function(){
99 projectTeamIds.push(pt.get('id'));
99 if(i === sdeHeads.length){
99 record.set('project_teams', projectTeamIds);
99 record.save();
99 }
});
});
9. }
});
});
恐怕没有太大的变化。现在发生了这样的事情:1)创建了一个项目(没有最重要的项目),预期会有许多现场项目团队。2)检索团队(通过创建项目团队操作)。到目前为止还不错3)现在,创建了Project_团队,但是Project和team的字段都为null!:/之后调用了projectRecord.save(),但我在PUT请求中看不到任何内容,因为它给了我204(无内容)状态…还有其他方法吗?老兄,为什么他们让它变得如此僵硬和难以工作?@kingping2k我用另一种方法编辑了我的原始问题,但也失败了!问题与余烬无关,而是前端的对象字段与后端的对象字段不对应。proect!=项目id。谢谢尽管我感谢你的帮助!
project.save().then(function(projectRecord){
var teamHookerUpper = function(teamId, arrVal, idx){
store.find('team', teamId).then(function(team){
var project_team = store.createRecord('project_team', {
project: projectRecord,
val: arrVal,
team: team
});
project_team.save().then(function(pt){
projectTeamIds.push(pt.get('id'));
if(idx === sdeHeads.length){
projectRecord.set('project_teams', projectTeamIds);
projectRecord.save();
}
});
};
for(var i = 0; i < valArr.length; i++){
teamHookerUpper(teamIds[i], valArr[i], i);
}
});