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: {