Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 添加具有多个关系的记录时出现问题_Ember.js_Ember Data - Fatal编程技术网

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); 
  }
});