2015-07-07 9 views
0

Что касается виджета Kendo Scheduler, я использую MVC Razor Helper, но мне нужно, чтобы пользователь мог определять свои собственные «ресурсы» в метаданных, а затем иметь рендеринг планировщика на основе этой конфигурации.Планировщик Kendo: динамическое определение ресурсов во время выполнения

Все примеры, которые я видел, требуют от разработчика, чтобы знать ресурсы должны быть связаны во время разработки (например, RoomID, OwnerId, Attendeed), используя следующий стиль добавления ресурсов ....

.Resources(resource => 
    { 
     resource.Add(m => m.RoomID) 
      .Title("Room") 
      .DataTextField("Text") 
      .DataValueField("Value") 
      .DataColorField("Color") 
      .BindTo(new[] { 
       new { Text = "Meeting Room 101", Value = 1, Color = "#6eb3fa" }, 
       new { Text = "Meeting Room 201", Value = 2, Color = "#f58a8a" } 
      }); 
     resource.Add(m => m.Attendees) 
      .Title("Attendees") 
      .Multiple(true) 
      .DataTextField("Text") 
      .DataValueField("Value") 
      .DataColorField("Color") 
      .BindTo(new[] { 
       new { Text = "Alex", Value = 1, Color = "#f8a398" } , 
       new { Text = "Bob", Value = 2, Color = "#51a0ed" } , 
       new { Text = "Charlie", Value = 3, Color = "#56ca85" } 
      }); 
    }) 

Однако, во время разработки, я не знаю, какие ресурсы (например, RoomID, Участники). Я буду знать только, что как только приложение запускается и запрашивает метаданные/базу данных. то есть я хочу, чтобы иметь возможность построить ресурсы, предпочтительно делает вызов Ajax, или, возможно, пробегаем по коллекции, хранящейся в переменной ViewBag .. Что-то вроде следующего:

.Resources(resource => 
    { 
     foreach(ResourceType resourceType in ViewBag.ResourceTypes) 
     { 
     resource.Add(resourceType.Name) 
      .Title(resourceType.Name) 
      .DataTextField("Text") 
      .DataValueField("Value") 
      .DataColorField("Color") 
      .BindTo(new[] { 
       new { Text = "some text", Value = 1, Color = "#6eb3fa" }, 
       new { Text = "some other text", Value = 2, Color = "#f58a8a" } 
      }); 
      }    
    }) 

Позвольте мне знать, если это имеет смысл или, если мне нужно предоставить больше информации ...

Благодаря

Jon

ответ

0
   $("#people :checkbox").change(function (e) { 
       var scheduler = $("#scheduler").data("kendoScheduler"); 
       var checkbobxObj = $(this); 
       var resourceData = scheduler.resources[0].dataSource.data(); 
       var reourceMatched = jQuery.grep(resourceData, function (n, i) { 
        return (n.ResourceId == checkbobxObj.val()); 
       }); 

       if (reourceMatched.length == 0) { 
        scheduler.dataSource.options.serverFiltering = false; 
        scheduler.resources[0].dataSource.add({ 
         ResourceId: checkbobxObj.val(), 
         ResourceName: checkbobxObj.prop("name") 
        }); 
        // filter resource 
        filterResource(); 
       } 
       else { 
        // filter resource 
        filterResource(); 
       } 
      }); 

      filterResource = function() { 
       var scheduler = $("#scheduler").data("kendoScheduler"); 
       var checked = $.map($("#people :checked"), function (checkbox) { 
        return parseInt($(checkbox).val()); 
       }); 
       var filter = { 
        logic: "or", 
        filters: $.map(checked, function (value) { 
         return { 
          operator: "eq", 
          field: "ResourceId", 
          value: value 
         }; 
        }) 
       }; 
       //filter the resource data source 
       scheduler.dataSource.options.serverFiltering = false; 
       console.log("filter", filter); 
       scheduler.resources[0].dataSource.filter(filter); 
       scheduler.view(scheduler.view().name); 
       scheduler.dataSource.options.serverFiltering = true; 
      };