Kendo ui 筛选剑道ui调度程序

Kendo ui 筛选剑道ui调度程序,kendo-ui,kendo-scheduler,Kendo Ui,Kendo Scheduler,我在日记应用程序中有一个调度程序和一个下拉列表。调度程序的配置如下: $("#scheduler").kendoScheduler({ date : Date.now(), workDayStart: new Date("2015/1/1 08:00 AM"), workDayEnd: new Date("2015/1/1 8:00 PM"), dateHeaderTemplate: k

我在日记应用程序中有一个调度程序和一个下拉列表。调度程序的配置如下:

       $("#scheduler").kendoScheduler({
            date : Date.now(),
            workDayStart: new Date("2015/1/1 08:00 AM"),
            workDayEnd: new Date("2015/1/1 8:00 PM"),
            dateHeaderTemplate: kendo.template("<strong>#=kendo.toString(date, 'ddd dd/M')#</strong>"),
            majorTimeHeaderTemplate: kendo.template("<strong>#=kendo.toString(date, 'HH')#</strong><sup>00</sup>"),
            minorTimeHeaderTemplate: kendo.template("<strong>#=kendo.toString(date, 'HH')#</strong><sup>#=kendo.toString(date, 'mm')#</sup>"),
            selectable: true,
            messages: {
                ariaSlotLabel: "Selected from {0:g} to {0:g}",
                showWorkDay: "Show core work hours"
            },
            editable: {
                window: {
                    title: "Work Request Details",
                    width: "800px"
                },
                template: $("#customEditorTemplate").html()
            },
            edit: function (e) {
                //set the start end datetime
                if (e.event.isNew && e.event.id == -1) {
                    var startDtp = e.container.find("[name=start][data-role=datetimepicker]");
                    var endDtp = e.container.find("[name=end][data-role=datetimepicker]");
                    var setStartDate = e.event.start;
                    var setEndDate = e.event.end;
                    setStartDate.setHours(8);
                    setEndDate.setHours(-6); // by default the end date is midnight on the following day of the selected cell so we subtract 6h to get 18:00 on the selected date.
                    $(startDtp).data("kendoDateTimePicker").value(setStartDate); //set start date to the selected cell start date and time 08:00
                    $(endDtp).data("kendoDateTimePicker").value(setEndDate); //set enddate to the selected cell end date and time 18:00
                }

                var recurrenceEditor = e.container.find("[data-role=recurrenceeditor]").data("kendoRecurrenceEditor");
                //set start option value, used to define the week 'Repeat on' selected checkboxes
                recurrenceEditor.setOptions({
                start: new Date(e.event.start)
                });
            },
            eventTemplate: $("#eventTemplate").html(),
            height: 550,
            messages: {
                allDay: "Anytime"
            },
            views: [
                { type: "day", allDaySlot: true},
                { type: "week", eventHeight: 80 },
                { type: "timeline", eventHeight: 80 },
                { type: "timelineWeek", selected: true, majorTick: 1440, minorTickCount: 1, eventHeight: 80 },
                { type: "agenda" },
                { type: "month", eventHeight: 80 }
            ],
            timezone: "Etc/UTC",
            selectable: true,
            dataSource: {
                parameterMap: function parameterMap(data, type) {
                    console.log(type);
                    if (type === "read") {
                        //var reqFilter = wRequestFilter.value();
                        var reqFilter = 'ALL'
                        console.log(reqFilter);
                        if (reqFilter == "MY") {
                            data.filter = { logic: "and", filters: [{ field: "diary", operator: "eq", value: 'UIS' }, { field: "AssigneeID", operator: "eq", value: 1 }] };
                        } else if (reqFilter == "ALL") {
                            data.filter = { logic: "and", filters: [{ field: "diary", operator: "eq", value: 'UIS' }] };
                        } else {
                            data.filter = { logic: "and", filters: [{ field: "diary", operator: "eq", value: 'UIS' }, { field: "team", operator: "eq", value: reqFilter }] };
                        }

                    }
                    console.log(data);
                    return data;
                },
                type: "signalr",
                push: function (e) {
                    generateNotification(e.type, e.items[0].WRequestID, e.items[0].diary, e.items[0].team);
                },
                transport: {
                    signalr: {
                        hub: sHub,
                        promise: sHubStart,
                        server:   {
                            read: "read",
                            create: "create",
                            update: "update",
                            destroy: "destroy"
                        },
                        client: {
                            read: "read",
                            create: "create",
                            update: "update",
                            destroy: "destroy"
                        }
                    },
                },
                schema: {
                    model: {
                        id: "WRequestID",
                        fields: {
                            WRequestID: {
                                type: "number",
                                editable: false,
                                defaultValue: -1
                            },
                            start: {
                                from: "Start",
                                type: "date",
                                culture: "en-GB"
                            },
                            end :   {
                                from: "End",
                                type: "date",
                                culture: "en-GB" },
                            diary: {
                                from: "Diary",
                                type: "string",
                                defaultValue: "@AppShort"
                            },
                            team: {
                                from: "Team",
                                type: "string",
                                validation: { required: true }
                            },
                            title: {
                                from: "Title",
                                type: "string",
                                validation: { required: true }
                            },
                            workManager: {
                                from: "WorkManagerID",
                                type: "number",
                                validation: { required: true }
                            },
                            assignee: {
                                from: "AssigneeID",
                                type: "number",
                                validation: { required: true }
                            },
                            changeRef: {
                                from: "ChangeRef",
                                type: "string",
                                validation: { required: true }
                            },
                            description: {
                                from: "Description",
                                type: "string",
                                validation: { required: true }
                            },
                            impactedServers: {
                                from: "ImpactedServers",
                                type: "string",
                                validation: { required: true }
                            },
                            impactedServices: {
                                from: "ImpactedServices",
                                type: "string",
                                validation: { required: true }
                            },
                            isBAU: {
                                from: "IsBAU",
                                type: "boolean",
                                defaultValue: false
                            },
                            projectRef: {
                                from: "ProjectRef",
                                type: "string",
                                validation: { required: true }
                            },
                            notes: {
                                from: "Notes",
                                type: "string"
                            },
                            isOOH: {
                                from: "IsOOH",
                                type: "boolean",
                                defaultValue: false
                            },
                            isAllDay: {
                                from: "IsAllDay",
                                type: "boolean",
                                defaultValue: false
                            },
                            recurrenceRule: {
                                from: "RecurrenceRule",
                                type: "string"
                            },
                            recurrenceId: {
                                from: "RecurrenceID",
                                type: "number"
                            },
                            recurrenceException: {
                                from: "RecurrenceException",
                                type: "string"
                            },
                            startTimezone: {
                                from: "StartTimezone",
                                type: "string"
                            },
                            endTimezone: {
                                from: "EndTimezone",
                                type: "string"
                            },
                            requestStatus: {
                                from: "RequestStatus",
                                type: "number",
                                defaultValue: 0
                            }
                        }
                    },
                },
            }
        });
这是我的SchedulerRequestService类

    Public Class SchedulerRequestService

    Public Overridable Function GetAll() As IQueryable(Of WRequestViewModel)

        Using de As New SupportDiaryEntities

            Dim rList As IQueryable(Of WRequestViewModel)

            rList = (From r In de.tWorkRequests
                     Select New WRequestViewModel() With {
                        .WRequestID = r.WRequestID,
                        .Start = r.Start,
                        .[End] = r.[End],
                        .Title = r.Title,
                        .Diary = r.Diary,
                        .Team = r.Team,
                        .WorkManagerID = r.WorkManagerID,
                        .AssigneeID = r.AssigneeID,
                        .ChangeRef = r.ChangeRef,
                        .Description = r.Description,
                        .ImpactedServers = r.ImpactedServers,
                        .ImpactedServices = r.ImpactedServices,
                        .IsBAU = r.IsBAU,
                        .ProjectRef = r.ProjectRef,
                        .Notes = r.Notes,
                        .IsOOH = r.IsOOH,
                        .IsAllDay = r.IsAllDay,
                        .RecurrenceRule = r.RecurrenceRule,
                        .RecurrenceID = r.RecurrenceID,
                        .RecurrenceException = r.RecurrenceException,
                        .StartTimezone = r.StartTimezone,
                        .EndTimezone = r.EndTimezone,
                        .RequestStatus = r.RequestStatus
                    }).ToList.AsQueryable()

            Return rList

        End Using

    End Function

        'OTHER FUNCTIONS (Insert, Update, Delete) Removed for brevity.
    End Class
更新2

在Calinaadi的帮助下,通过在剑道网格上过滤信号器数据源的示例,我可以看出我需要修改read函数以接受过滤器。不幸的是,网格中使用的示例将.take、.skip、.sort、.filter和.aggregate作为参数,我知道当您有一个带有分页的网格,并且您希望在跳过Y个记录后获取X个记录时,这些参数是可以理解的

这是telerik演示中的一个典型示例

    public DataSourceResult Read(MyDataSourceRequest request)
{
    return productService.Read().ToDataSourceResult(request.Take, request.Skip, request.Sort, request.Filter, request.Aggregates);
}
对于调度程序,我希望读操作能够取回当前调度程序视图开始时或之后的所有事件,以及当前调度程序视图结束时或之前的所有事件。可能是按开始排序的。由字段过滤器过滤是必要的(这些是我设置的过滤器)。我看不出take、skip或aggregate在获取事件数据时有任何概念

我的应用程序功能与过滤功能完全分离。我有一个VS解决方案,必要时可以与填充了虚拟记录的数据库共享

为任何帮助提供赏金。

您应该更改:

transport: {
                    signalr: {
                        hub: sHub,
                        promise: sHubStart,
                        ParameterMap: "parameterMap",
致:


经过多次搜索和阅读。我现在有了一个工作系统。调度程序需要参数
serverFiltering:true
,并且必须重新执行
读取、创建、更新和销毁
功能才能接受已发布的筛选器。如果有人想要一份代码的副本,但该副本有点太多,无法在此处发布,我可以将其发送给您。

您可以在触发过滤器的位置添加代码吗?@calinaadi我不确定我是否理解。。。调度程序在初始化时会触发读取我相信。。。数据源通过信号器绑定。你是说集线器代码吗?@calinaadi我已经添加了集线器和被调用的函数来读取数据。。。你可能已经猜到我有点不知所措了。。。这个项目已经从一个基本的日历滚雪球到一个具有许多功能的日历。从我读到的,我认为过滤是客户端完成的,但我可能是错的。。。如果是服务器端,我如何通过读取请求传递过滤器?过滤是在数据源上完成的,您可以使用datasource从客户端调用它。过滤器方法示例:此示例使用网格,过滤器是静态的。我需要动态,因为我有一个字段将始终被过滤,另外两个字段可能被过滤,也可能不被过滤。用于筛选的值也可以更改。Calinaadi,非常感谢您的帮助。我已按照指示更新了parameterMap部分。我还暂时添加了静态值,只是为了测试过滤,而不是从页面上的其他元素中查找值。我添加了console.log命令来跟踪各种数据。不幸的是,仍然没有过滤。显示所有数据。。。没有错误,并且日志记录不会产生任何结果。。。这就好像忽略了parameterMap函数一样。。。但我看不到parameterMap在工作。。。警报(类型)未触发。我甚至尝试添加筛选器。。。我从你提供链接的dojo上取了一个分支。。。大写字母P,我没发现。警报现在起作用,但筛选不起作用。。。查看哪个过滤器已注释掉。如果运行,将弹出警报并显示数据。如果取消对data.filter行的注释并运行,则会弹出警报,但不会显示任何数据。。。我们应该看到ProductName以T开头的所有记录。筛选器将不起作用,因为您需要执行类似parameterMap:function(options){return JSON.stringify(options);}的操作,并且在服务器端,您需要有一个能够处理此类请求的方法。。。。仅适用于ex-public JsonResult Get(DataOptions options),其中DataOptions类似于:public GridFilter Filter{Get;set;}public int Skip{Get;set;}public GridSort[]Sort{Get;set;}public int Take{Get set;}
transport: {
                    signalr: {
                        hub: sHub,
                        promise: sHubStart,
                        ParameterMap: "parameterMap",
transport: {
                       parameterMap: function parameterMap(data, type) {
                                                            alert(type);    
                                },
                        signalr: {