javascript - Angular Kendo 调度器过滤器

标签 javascript angularjs kendo-ui kendo-scheduler

我在我的项目中使用剑道调度程序,我的 Angular Controller 调用服务器来获取数据,但是当我尝试动态过滤事件时,事件不会消失,有人有任何建议吗关于如何动态过滤我的调度程序数据?这是我的 Controller

        $scope.exercises = data.Data;

        $scope.result = new kendo.data.ObservableArray([]);
        $scope.transformData = function (response) {
            var event;
            for (var idx = 0, length = response.length; idx < length; idx++) {
                event = response[idx];

                $scope.result.push(new kendo.data.SchedulerEvent({
                    id: event.TaskID,
                    taskId: event.TaskID,
                    ownerId: event.OwnerID,
                    start: kendo.parseDate(event.start),
                    end: kendo.parseDate(event.end),
                    title: event.Title,
                    description: event.Description,
                    isAllDay: event.IsAllDay
                }));
            }
        };

        $scope.schedulerOptions = {
            showWorkHours: false,
            editable: false,
            views: [
                "day",
                "workWeek",
                "week",
                {type: "month", selected: true},
            ],
            resources: [
                {
                    field: "ownerId",
                    title: "Owner",
                    dataSource: [
                        {value: "sazonalidade_padrao", color: "red" },
                        {value: "volumetrica_anual", color: "green" },
                        {value: "flexibilidade_mensal", color: "yellow"},
                        {value: "volumetrica_mensal", color: "orange"}
                    ]
                }
            ],
            dataSource: {
                data: $scope.result,
                filter: {
                    logic: "or",
                    filters: [
                        { field: "ownerId", operator: "eq", value: "sazonalidade_padrao" },
                        { field: "ownerId", operator: "eq", value: "volumetrica_anual" },
                        { field: "ownerId", operator: "eq", value: "flexibilidade_mensal" },
                        { field: "ownerId", operator: "eq", value: "volumetrica_mensal" }
                    ]
                }
            }
        };


        $scope.generateObjToScheduler = function() {
            var i = 0;
            var resultado = [];
            angular.forEach($scope.exercises, function (exercise) {
                if (exercise.Operation.generalStatus == 'aprovado') {
                    i++;
                    var dateStart = moment(exercise.dueDate, 'YYYY-MM-DD').format('x');
                    var dateEnd = moment(exercise.dueDate, 'YYYY-MM-DD').format('x');
                    var response = {
                        "TaskID": i,
                        "OwnerID": exercise.OperationFlexibility.type,
                        "Title": exercise.Operation.code+'-'+exercise.OperationFlexibility.name,
                        "Description": exercise.OperationFlexibility.name,
                        "IsAllDay": true,
                        "start": "/Date(" + dateStart + ")/",
                        "end": "/Date(" + dateEnd + ")/"
                    };
                    resultado.push(response);
                }
            });
            $scope.transformData(resultado);
        };
        $scope.generateObjToScheduler();

        $scope.filterFlexibility = function() {
            $scope.schedulerOptions.dataSource.filter.filters.splice(0,1);
        };
    }
]);

我从复选框触发 filterFlexibility 函数

最佳答案

我会回答我自己的问题,我找到了解决方案,当你从kendo.data.ObservableArray中拼接一个项目时,kendo会重新组织这个数组的所有索引,所以这是我过滤itens的解决方案

$scope.exercises = data.Data;
        var i = 0;
        $scope.result = new kendo.data.ObservableArray([]);
        $scope.transformData = function (response) {
            var event;
            for (var idx = 0, length = response.length; idx < length; idx++) {
                event = response[idx];

                $scope.result.push(new kendo.data.SchedulerEvent({
                    id: event.TaskID,
                    taskId: event.TaskID,
                    ownerId: event.OwnerID,
                    start: kendo.parseDate(event.start),
                    end: kendo.parseDate(event.end),
                    title: event.Title,
                    description: event.Description,
                    isAllDay: event.IsAllDay
                }));
            }
        };

        $scope.schedulerOptions = {
            showWorkHours: false,
            views: [
                "day",
                "workWeek",
                "week",
                {type: "month", selected: true}
            ],
            resources: [
                {
                    field: "ownerId",
                    title: "Owner",
                    dataSource: [
                        {text: "sazonalidade_padrao",value: "sazonalidade_padrao", color: "red" },
                        {text: "volumetrica_anual",value: "volumetrica_anual", color: "green" },
                        {text: "flexibilidade_mensal",value: "flexibilidade_mensal", color: "yellow"},
                        {text: "volumetrica_mensal",value: "volumetrica_mensal", color: "orange"}
                    ]
                }
            ],
            dataSource: {
                data: $scope.result
            }
        };


        $scope.generateObjToScheduler = function() {
            var resultado = [];
            angular.forEach($scope.exercises, function (exercise) {
                if (exercise.Operation.generalStatus == 'aprovado') {
                    i++;
                    var dateStart = moment(exercise.dueDate, 'YYYY-MM-DD').format('x');
                    var dateEnd = moment(exercise.dueDate, 'YYYY-MM-DD').format('x');
                    var response = {
                        "TaskID": i,
                        "OwnerID": exercise.OperationFlexibility.type,
                        "id": exercise.dOperationFlexibilityId,
                        "Title": exercise.Operation.code+'-'+exercise.OperationFlexibility.name,
                        "Description": exercise.OperationFlexibility.name,
                        "IsAllDay": true,
                        "start": "/Date(" + dateStart + ")/",
                        "end": "/Date(" + dateEnd + ")/"
                    };
                    resultado.push(response);
                }
            });
            $scope.transformData(resultado);
        };
        $scope.generateObjToScheduler();

        $scope.filterFlexibility = function(flexibility) {
            var a = 0;
            var j = 0;
            var inArray = false;
            while(a < $scope.result.length){
                if($scope.result[a].ownerId == flexibility){
                    inArray = true;
                    $scope.result.splice(a, 1);
                    a=0;
                }else{
                    a++
                }
            }
            if(inArray == false) {
                for (j; j < $scope.exercises.length; j++) {
                    if ($scope.exercises[j].type == flexibility) {
                        i++;
                        $scope.result.push(new kendo.data.SchedulerEvent({
                            id: i,
                            taskId: i,
                            ownerId: flexibility,
                            start: kendo.parseDate("/Date(" + moment($scope.exercises[j].dueDate, 'YYYY-MM-DD').format('x') + ")/"),
                            end: kendo.parseDate("/Date(" + moment($scope.exercises[j].dueDate, 'YYYY-MM-DD').format('x') + ")/"),
                            title: $scope.exercises[j].Operation.code + '-' + $scope.exercises[j].OperationFlexibility.name,
                            description: $scope.exercises[j].OperationFlexibility.name,
                            isAllDay: true
                        }));
                    }
                }
            }
        };

关于javascript - Angular Kendo 调度器过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32653306/

相关文章:

javascript - jvectormap 中的 jQuery.Deferred 异常

javascript - 我们如何将 Quill 应用于所有类选择器(而不仅仅是第一个匹配项)

javascript - 拒绝在浏览器中设置不安全 header "Cookie"错误但请求成功

javascript - 错误 [$注入(inject)器 :unpr] when injecting sanitize dependency

kendo-ui - 如何从 Kendo 条形图/柱形图中删除水平网格线?

javascript - 有什么方法可以在页脚内显示从剑道中的日期选择器中选择的日期?

javascript - 相对 JavaScript 路径不起作用

javascript - 防止重新激活 javascript 对密码字段的盲目影响

angularjs - 如何跟踪 AngularJS 中的事件?

javascript - 覆盖 Kendo UI 中的 javascript 函数