2016-05-10 2 views
2

Я использую источник данных KendoUI для привязки KendoUIScheduler через SignalR. Как я могу передать параметры для чтения операции с источником данных с привязками signalR.Как передать параметры в SignalR Чтение Odeartion KendoUI DataSource

Я использую следующий код:

вар хаба = $ .connection.schedulerHub;
var hubStart = $ .connection.hub.start();

$('#scheduler').kendoScheduler({ 
     mobile: true, 
     height: 600, 

     views: [ 
      'day', 
      'week', 
      'month', 
      'agenda', 
      { type: 'timeline', selected: true } 
     ], 

     timezone: 'Etc/UTC', 
     dataSource: { 
      type: "signalr", 
      push: function (e) { 
       alert(e.type); 
      }, 
      autoSync: true, 
      transport: { 
       signalr: { 
        promise: hubStart, 
        hub: hub, 
        server: { 
         read:"read", 
         update: "update", 
         destroy: "destroy", 
         create: "create"       

        }, 
        client: { 
         read:"read", 
         update: "update", 
         destroy: "destroy", 
         create: "create" 

        } 
       } 
      }, 

      schema: { 
       model: { 
        id: 'SchedulerID', 
        fields: { 
         SchedulerID: { type: 'number', from: 'SchedulerID' }, 
         start: { type: 'date', from: 'Start' }, 
         end: { type: 'date', from: 'End' },       
         startTimezone: { from: "StartTimezone" }, 
         endTimezone: { from: "EndTimezone" }, 
         Title: { from: 'Title' }, 
         isAllDay: { type: 'boolean', from: 'IsAllDay' }, 
         recurrenceId: { from: "RecurrenceId" }, 
         recurrenceException: { from: "RecurrenceException" }, 
         recurrenceRule: { from: "RecurrenceRule" },       
         Users: { nullable: true, from: 'Users' }, 

        }, 
       } 
      } 

     }, 


     group: { 
      resources: ['Users'], 
      orientation: 'vertical' 
     }, 
     resources: [ 
      { 
       field: 'Users', 
       name: 'Users', 
       dataSource: Users, 
       multiple: false, 
       title: 'Users' 
      } 

     ] 
    }); 

ответ

1

Я понимаю, что этот вопрос старый, но я пытался найти тот же ответ и не нашел четких решений. Я нашел некоторые подсказки в других потоках, которые привели меня к решению, хотя я уверен, что есть лучшие (я не мог понять, как отправлять параметры отдельно - только как один объект).

В вашем источнике данных используйте функцию parameterMap для ввода любых настраиваемых параметров, которые вы хотите. При привязке к WCF (код с комментариями) вы можете отделить параметры для вызова, но я не мог получить это для работы с реализацией SignalR.

type: "signalr", 
      transport: { 
       parameterMap: function (data, type) { 

        switch (type) { 
         case "read": 
          { 
           // this works 
           var request = {}; 
           var chkunsub = $('#chkunsubscribed').is(':checked'); 
           request.unsubscribed = chkunsub; 
           request.oKendo = data; 
           return request; 
           // Does not work (separating parameters) 
           //return { 
           // unsubscribed: chkunsub, 
           // oKendo: data 
           //}; 
          } 
          // Does not work either (separating parameters) 
          //return kendo.stringify({ 
          // unsubscribed: chkunsub ? 1 : 0, 
          // oKendo: data 
          //}); 
        } 
       }, 

Обратите внимание, что переменный «данные» содержит фильтр, пейджинг, группировку и т.д. (я привязку к сетке, но я думаю, что это то же самое для планировщика).

Затем на стороне сервера в вашем концентраторе вам нужно просто зеркально отразить структуру класса (мой класс CKendoGridOptions имеет все свойства из API, такие как страница, пропустить, фильтр и т. Д.).

Public Class EventRequestData 
    Public Property unsubscribed As Boolean 
    Public Property oKendo As CKendoGridOptions 
End Class 

' This works 
Public Function read(data As EventRequestData) As OrmedReturnData 
    Dim oReturn As New OrmedReturnData 

    If IsLoggingEnabled() Then 
     WriteToEventLog("Hub getevent_item called") 
    End If 

    Dim oToken As TokenHelper.TokenData = TokenHelper.ValidateToken(New Guid(Context.Request.Cookies("token").Value)) 
    If oToken.TokenOK = False Then 
     oReturn.Success = False 
     oReturn.ErrorMessage = ERROR_INVALID_TOKEN 
    Else 
     Dim oData As New EventItems 
     oReturn = oData.Getevent_items(data.unsubscribed, data.oKendo) 
    End If 

    Return oReturn 

End Function 

Я надеюсь, что это помогает кто-то еще, кто пытается передать параметры функции чтения с помощью Кендо в JQuery и SignalR.

Смежные вопросы