2016-06-22 7 views
2

다이어리 앱에 스케줄러와 드롭 다운이 있습니다. 스케줄러는 같은 구성되어kendo ui 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: 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 
          } 
         } 
        }, 
       }, 
      } 
     }); 

I의 데이터를 하나 개 또는 두 개의 비트들에 기초하여 데이터를 필터링 된 parameterMap를 사용하는 것을 시도하고있다.

  • ALL 경우 다음 데이터 일기로 여과 드롭 값 = @AppShort가 Web.config의 설정 부로부터 유래 @AppShort. 드롭 다운 값이 팀 이름이 을 선택 때문에 데이터가 일기에 의해 필터링 의미 다음 다른 것 인 경우
  • 드롭 다운 값은 = MY 다음 데이터가 더 단지 디스플레이로 여과 현재 이벤트를
  • 를 사용하는 경우 및 팀.

내 문제는 데이터가 전혀 필터링되지 않고 parameterMap 함수가 실행되지 않는다는 것입니다. 이것이 최선의 접근 방법인가 아니면 필터링을 구현하는 다른 방법인가?

도움을 주시면 감사하겠습니다.

UPDATE는 요청으로

...이 내 signalR 허브 코드입니다 ...

Public Class WRequestHub 
    Inherits Hub 

    Private requestService As SchedulerRequestService 

    Public Sub New() 
     requestService = New SchedulerRequestService() 
    End Sub 

    Public Function Read() As IEnumerable(Of WRequestViewModel) 
     Return requestService.GetAll() 
    End Function 

    Public Sub Update(request As WRequestViewModel) 
     requestService.Update(request) 
     Clients.Others.update(request) 
    End Sub 

    Public Sub Destroy(request As WRequestViewModel) 
     requestService.Delete(request) 
     Clients.Others.destroy(request) 
    End Sub 

    Public Function Create(request As WRequestViewModel) As WRequestViewModel 

     requestService.Insert(request) 
     Clients.Others.create(request) 

     Return request 

    End Function 

    Public Sub LockRecord(id As Integer) 
     Clients.Others.lockRecord(New With { 
      Key .id = id 
     }) 
    End Sub 

    Public Sub UnlockRecord(id As Integer) 
     Clients.Others.unlockRecord(New With { 
      Key .id = id 
     }) 
    End Sub 

End Class 

그리고 이것은 내 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)의 도움과 검도 그리드에서 SignalR 데이터 소스 필터링 예제를 통해 필자의 필터를 받아들이도록 읽기 기능을 수정해야한다는 것을 알 수 있습니다. 불행히도 그리드와 함께 사용 된 예제는 .take, .skip, .sort, .filter 및 .aggregate를 paragingers로 사용하여 페이징이있는 그리드가 있고 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 솔루션이 있습니다.

도움을 주시면 현상금을 제공합니다.

+0

필터가 트리거되는 코드도 추가 할 수 있습니까? – calinaadi

+0

@calinaadi 내가 이해할 수 있을지 모르겠다 ... 내가 생각하기에 초기화 될 때 스케줄러가 읽기를 트리거한다. 데이터 소스는 signalR을 통해 바인딩된다. 허브 코드입니까? – Mych

+0

@calinaadi 데이터를 읽으려는 허브와 함수를 추가했습니다 ... 당신이 모여 있을지도 모릅니다. 여기 내 깊이에서 조금 벗어났습니다 ...이 프로젝트는 기본 달력에서부터 많은 기능을 갖춘 것으로 나타났습니다. 내가 읽은 바로는 필터링이 클라이언트 측에서 이루어 졌다고 생각했지만 잘못된 것일 수 있습니다 ... 서버 측 일 경우 어떻게하면 내 읽기 요청으로 필터를 전달합니까? – Mych

답변

1

많은 검색과 많은 독서 후. 이제는 작동 시스템이 있습니다. 매개 변수 serverFiltering: true을 필요로하는 스케줄러에는 Read, Create, Update and Destroy 기능도 게시 된 필터를 승인하기 위해 다시 실행해야합니다. 누구든지 여기에 게시하기에는 너무 많은 코드 사본을 원한다면 내가 가지고 있도록 할 수 있습니다.

3

당신은 변경해야합니다 :

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

에 :

transport: { 
         parameterMap: function parameterMap(data, type) { 
                  alert(type);  
           }, 
         signalr: { 
+0

칼리 나디, 당신의 도움에 대해 대단히 감사합니다. 지시 된대로 parameterMap 섹션을 업데이트했습니다. 또한 정적 인 값을 추가하는 시간에 대해서만 페이지의 다른 요소에서 값을 조회하는 대신 필터링을 테스트했습니다. 다양한 데이터를 추적하기 위해 console.log 명령을 추가했습니다. 불행히도 필터링이 없습니다. 모든 데이터가 표시됩니다 ... 오류가없고 로깅 결과가 없습니다 ... 매개 변수 맵 함수가 무시되는 것과 같습니다. – Mych

+0

http://dojo.telerik.com/APIrO – calinaadi

+0

dojo 예제를 살펴 보았지만 parameterMap 작업 ... 경고 (유형)가 트리거되지 않습니다. – Mych