如何将输出子任务输出到图表d3.js?

时间:2017-08-19 19:34:12

标签: javascript asp.net d3.js

有一系列对象。对象是任务。每个对象都有一个嵌套对象数组。嵌套对象是子任务。

在控制器中

object

在视图中

[HttpGet]
    public async Task<IActionResult> Gantt()
    {
        var applicationContext = await _context.GisTask
            .Include(g => g.StatusTask).Where(g => g.StatusTask.Name == "В работе")
            .Include(g => g.Category)
            .Include(g => g.Customer)
            .Include(g => g.User)
            .Include(g => g.ControleUser)
            .Include(g => g.GisComments)
            .Include(g => g.SecondTasks)
            .OrderBy(g => g.EndDateTime)
            .ToListAsync();
        //JsonConvert.SerializeObject((from a in db.Events where a.Active select a).ToList(), Formatting.Indented,new JsonSerializerSettings()
        //{
        //    ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
        //}
        return View(applicationContext);
    }

enter image description here

如何将输出子任务输出到图表d3.js?需要在每个任务下显示子任务。在我看来,结果只推断出任务。

1 个答案:

答案 0 :(得分:0)

问题解决了。以前,我有一个包含其他对象的对象数组。我将所有子任务与新数组中的任务放在同一级别。我创建了一个通用数组,在每个任务之后都有子任务。此外,在执行循环期间,子任务按结束日期排序。

var datagantt = @Html.Raw(Json.Serialize(Model));

var second = [];

datagantt.forEach(function (item) {
    second.push(item);
    item.secondTasks
        .sort(function (a, b) {
            if (a.endDateTime == b.endDateTime)
                return 0;
            if (a.endDateTime < b.endDateTime)
                return -1;
            else
                return 1; 
        })
        .forEach(function (d) {
        second.push(d);
    })
});

就是这样 [{0 task},{1 task},{2 task},{3 task:subtasks [{0 subtask} {1 subtask} {3 subtask}]}]

它变得如此[{0 task},{1 task},{2 task},{3 task},{0 subsask in 3 task},{1 subtask in 3 task},{3 subtask in 3 task} ,{4任务},{0任务4个任务},{1个任务2个任务}]

The result