2016-09-28 48 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可以做得更好。精心打理你的文檔。今天沒有甜點給你。