2016-09-28 51 views
0

通过与jaydata一起工作,我将实体添加到深度嵌套实体对象的树结构中。Jaydata saveChanges()统计跟踪/更改的实体,但不会发送批量请求(使用OData v4 Provider和Web Api)

我将上层实体附加到上下文并编辑/添加/删除相关的子实体。最后,我使用saveChanges()和promise。

传递给承诺的计数值告诉所有更改的实体已被正确计数,但saveChanges()未执行批处理请求并持续这些实体。

所以感觉没有其他事情发生,但计数实体。

我发表了一个小例子。我很肯定,这些实体的参考设置是正确的。 (使用jaydata,odata v4,web api和angularjs)

是否有人与jaydata有这个问题,并找到原因?

感谢您的帮助。 =)

问候保罗

// Attach upper entity 
 
DataService.jaydata.attach(viewModel.currentSkillTree.entity); 
 

 
// Generating new entities 
 
var newSkill = new DataService.jaydata.Skills.elementType({ 
 
    Id: undefined, 
 
    Name: 'New skill', 
 
    Levels: [], 
 
    IconId: 47, 
 
    SkillTreeUsage: [] 
 
}); 
 

 
var newSkillLevel = new DataService.jaydata.SkillLevels.elementType({ 
 
    Id: undefined, 
 
    ShortTitle: 'New level', 
 
    Skill: newSkill, 
 
    SkillId: undefined, 
 
    Level: 1, 
 
    RequirementSets: [] 
 
}); 
 

 
var newRequirementSet = new DataService.jaydata.RequirementSets.elementType({ 
 
    Id: undefined, 
 
    SkillLevel: newSkillLevel, 
 
    SkillLevelId: undefined, 
 
    SkillTree: undefined, 
 
    SkillTreeId: viewModel.currentSkillTree.entity.Id, 
 
}); 
 

 
var newSkillTreeElement = new DataService.jaydata.SkillTreeElements.elementType({ 
 
    Id: undefined, 
 
    SkillTree: undefined, 
 
    SkillTreeId: viewModel.currentSkillTree.entity.Id, 
 
    Skill: newSkill, 
 
    SkillId: undefined, 
 
    Position: { X: x, Y: y } 
 
}); 
 

 
// Completing object-references 
 

 
viewModel.currentSkillTree.entity.Elements.push(newSkillTreeElement); 
 

 
newSkill.Levels.push(newSkillLevel); 
 

 
newSkill.SkillTreeUsage.push(newSkillTreeElement) 
 

 
newSkillLevel.RequirementSets.push(newRequirementSet); 
 

 
// Saving 
 
DataService.jaydata.saveChanges() 
 
.then(function (cnt) { 
 

 
    console.log('Saved entities:', cnt); 
 

 
    // The cnt-result in console is 4 
 
    // But no request was executed, nothing was saved 
 

 
}, function (exception) { 
 
    console.log(exception); // Also no exception was thrown 
 
});

+0

在其生命周期结束时是否有人或jaydata?对于大家试验jaydata:我不推荐使用它。文档很烂,太小,不完整,jaydata的版本越高,文档变得越陈旧。我不是在说谎,我是这样说的。没有人会为此感到负责,而且已知的错误仍然保持开放状态,并且不会在多年内得到修复。 –

+0

大拇指朝下,完全。不要使用jaydata! 更好地被警告,并提防你的业障。使用jaydata会破坏它。(在过时的帖子和脚本中被丢失了几个星期和几个月,当它变得复杂和棘手时仍然没有找到解决方案) 对于jaydata的开发者:停止开发。醒来,从网上拿下来。你只是不断浪费人们的时间。你无法处理,你无法负担得起服务一个出色的开源库再花费什么。没有人应该进入你的快速和肮脏的陷阱。 **愤怒** –

回答

0

所以不是无情。

解决上述问题的解决方案,因为我尝试了几乎所有的实体组合(添加,附加,.save(),.saveChanges(),对象引用等),找出它没有任何意义无论如何,它只是采取了相同的方式,似乎是如此错误),最终在一个解决方案中使用经典的嵌套异步调用。

解决方案是将实体单独保存在嵌套promise中并关闭jaydata的批处理行为,以避免重复请求。

你可以找到$ data.defaults内的选项

$ data.defaults.OData.disableBatch = TRUE;

因为我现在正在处理好厄运的古老讨厌的金字塔,它至少给出了以正确的顺序保存实体的可能性,完全控制了api需要的方式。

 // Saving new SkillLevelRequirement connection 
 
     if (isConnectionGiven === false) { 
 

 
     // The first level of source skill where the target-skill-requirement will be added 
 
     var sourceSkillLevel = Enumerable 
 
      .From(sourceSkill.Levels) 
 
      .FirstOrDefault(null, function (x) { 
 
      return x.Level === 1; 
 
      }); 
 

 
     // The last level of the target-skill to solve 
 
     var targetSkillLevel = Enumerable 
 
      .From(targetSkill.Levels) 
 
      .FirstOrDefault(null, function (x) { 
 
      return x.Level === targetSkill.Levels.length; 
 
      }); 
 

 
     // First set of first level from source skill (will be used to add skilllevel-requirement) 
 
     var firstRequirementSet = sourceSkillLevel.RequirementSets[0]; 
 

 
     // New RequirementAsignment 
 
     var newRequirementAssignment = new DataService.jaydata.RequirementAssignments.elementType({ 
 
      RequirementSetId: firstRequirementSet.Id, 
 
      Order: 1 
 
     }); 
 

 
     // New Requirement 
 
     var newRequirement = new DataService.jaydata.Requirements.elementType({ 
 
      Title: requirementTypes.SKILL_CONNECTION, 
 
      RequirementOfIntId: undefined, 
 
      RequirementOfBoolId: undefined, 
 
      RequirementOfSkillLevelId: 0 
 
     }); 
 

 
     // New RequirementOfSkillLevel 
 
     var newRequirementOfSkillLevel = new DataService.jaydata.RequirementsOfSkillLevel.elementType({ 
 
      SkillLevelId: targetSkillLevel.Id, 
 
     }); 
 

 
     // Loading symbol 
 
     showBusyIndicator(); 
 

 
     newRequirementOfSkillLevel.save() 
 
     .then(function() { 
 
      newRequirement.RequirementOfSkillLevelId = newRequirementOfSkillLevel.Id; 
 
      newRequirement.save() 
 
      .then(function() { 
 
      newRequirementAssignment.RequirementId = newRequirement.Id; 
 
      newRequirementAssignment.save() 
 
      .then(function() { 
 

 
       // Loading symbol will be closed after tree reloaded 
 
       reloadCurrentTree(); 
 

 
      }, function (exception) { 
 
       showJayDataExceptionModal(exception); 
 
      }); 
 
      }, function (exception) { 
 
      showJayDataExceptionModal(exception); 
 
      }); 
 
     }, function (exception) { 
 
      showJayDataExceptionModal(exception); 
 
     }); 
 

 
     } 
 
    }

@jaydata开发商:谢谢42个新白发。我仍然认为我错误地使用了你的工具,jaydata可以做得更好。精心打理你的文档。今天没有甜点给你。