1

有没有办法有条件地将“空”行添加到 ui-grid 模型?我的项目的要求规定我们按日期显示项目(非常容易),但也显示没有项目的日子的空行,以便用户一眼就能看到这些差距(更困难)。

有点符合这个问题的要求,也许某种按日期分组并为没有关联项目的日期插入一个空组可能会起作用......?

我可以创建一个全新的集合模型,将日期和我的实际数据结合起来,并让 ui-grid 使用它,但这似乎非常不优雅,因为当对数据进行更改时,它可能需要大量手动重新加载所有内容。理想情况下,我只想将我的数据行集合提供给网格,但仍然让它显示一个额外的行,其中仅包含当前没有项目的日期的日期字段。

实际上,我现在使用表和 ng-repeat 在设置中进行了此工作,但是我希望切换到 ui-grid 或类似的工具以获得虚拟滚动等的好处,因为我有很多可编辑的(因此,完全-绑定)数据。

提前致谢...

4

1 回答 1

1

这样的东西能满足你的需求吗?

function fillInEmptyDates(startDate, endDate, data) {
    var dateToCheck = moment(startDate);
    var end = moment(endDate);
    var finished = false;

    while (!finished) {
        if (!Enumerable.from(data).any(function (x) { return dateToCheck.diff(x.YourEntityDateField, 'days') === 0; }))     {
            var newEntity = { "YourEntityDateField": dateToCheck.clone().toDate() };
            data.unshift(newEntity);
        };

        dateToCheck.add(1, 'days');
        if (dateToCheck.diff(end, 'days') === 0) {
            finished = true;
        }
    }
}

被称为...

fillInEmptyDates(new Date(2014, 6, 30), new Date(2014, 10, 25), $scope.gridOptions.data);

您可以将第一个日期作为当前数据的最小值,将结束日期作为最大值,或者根据您的需要进行调整。

请注意,我使用MomentJS进行日期操作,使用LinqJS来查看数据的日期。我敢肯定,如果您愿意,将有一种简单的方法可以在不使用 LinqJS 的情况下循环遍历数据。(我是 JavaScript 新手,发现自己迷上了我以前在 C# 中做的 LINQ 东西。)

您在网格选项中指定的排序应适用于新创建的行。

(旁注:您可能必须使用时区才能准确获得所需的值。如果您看到确实有数据的日期重复,那么可能是由于这个原因。)

于 2014-11-04T23:00:12.877 回答