2014-09-12 25 views
1

我在我的项目中使用了Knockout-kendo.js binding for Kendo Scheduler。我在使用Horizontal Grouping。所以,在这里我用DataSource and well as Resources with group.为kendo计划程序创建KO绑定处理程序更新/重新分配

我宣布我的变量象下面这样:

monitorData = ko.observableArray(), 

schedulerData = ko.observableArray(), 

我的激活方法:

activate = function (args) { 
      getMonitorData(); 
      getschedulerData (08, 09, 2014); 
}, 

我的服务调用的激活方法完成之前正在返回。这里Observable数组应该可以工作。但实际上它没有将数据分配给我的调度程序。即使有可观察数组中的数据。

我的计划代号:

 <div class="scheduler"> 
      <div id="scheduler" data-bind="kendoScheduler: 
      {      
       date: new Date(), 
       startTime: new Date('2014/6/13 12:15 AM'), 
       endTime: new Date('2014/6/13 11:54 PM'), 
       height: containerHeight, 
       views: [{ type: 'day', selected: true, majorTick: 15 }], //'week', //'month', //'Agenda' 
       editable: false, 
       useKOTemplates: true, 
       eventTemplate: $('#event-template').html(), 
       allDaySlot: false, 
       timezone: 'Etc/UTC', 
       footer: { command: false }, 
       dataSource: schedulerData(), 
       group: { resources: ['Monitors'] }, 
       resources: [{ field: 'scheduleId', name: 'Monitors', dataSource: monitorData(), title: 'Monitors' }], 
       dataBound: function() { $('.k-floatwrap ul li.k-nav-current').hide(); } 
      }"> 
      </div> 
     </div> 

如果我硬编码数据的变量时,其得到初始化,它得到的工作。所以没有时间间隔,所以数据被分配给调度器。

象下面这样:

processMonitors = processMonitorMapper(monitors), // Functio without service call - returns hard code data 

schedulerData = schedulerDataMapper(rawData), // // Functio without service call - returns hard code data 

我才知道可观察到的阵列中的数据将不会被剑道调度可以理解,如果其初始数据的初始化后分配。所以我尝试了ko.toJS。这对我也没有帮助。

为了避免这种问题。我已经尝试了调度程序的ko.bindhandlers

代码:

ko.bindingHandlers.kendoScheduler = { 
      init: function (element) { 
       var sch = $(element).data("kendoScheduler"); 
       console.log("Scheduler Initiated"); 
      }, 
      update: function (element, valueAccessor) { 
       var value = ko.utils.unwrapObservable(valueAccessor()); 
       //var scheduler = $(element).data("kendoScheduler"); 
       //if (scheduler != null) { 
       //if (value.dataSource != null && value.dataSource.length > 0 && value.resources[0] != null && value.resources[0].dataSource.length > 0) { 
       // $(element).kendoScheduler({ dataSource: value.dataSource, resources: value.resources }); 
       //} 

       var dataSource = new kendo.data.SchedulerDataSource({ 
        data: value 
       }); 
       $(element).data("kendoScheduler").setDataSource(dataSource) 
       //} 
       console.log("Scheduler Updated"); 
      } 
     }; 

但问题是,上面的代码也无法正常工作。请帮我解决上述问题。

附加信息:另外我需要更改调度程序的数据源&,每一天都是明智的。日期将通过kendo日历选择。我需要每天致电服务选择明智。因此,新的数据源需要分配到Kendo Scheduler.

如何动态分配kendo调度器数据源&资源。如果我分配给可观察阵列,它不工作/没有得到分配,如上所述。

如何为kendoScheduler Update/Init编写ko.bindingHandlers?

回答

1

无需编写Ko BindHandlers

我刚从getschedulerData()方法中分配了我的dataSource。另外当我第一次加载电话是async: false。现在我拨打电话sync。那么,那activate method will not be returned until otherwise the call get finished

下面是我用替换数据源代码:

   var scheduler = $('#scheduler').data('kendoScheduler'); 
       if (scheduler != null) { 
        var dataSource = new kendo.data.SchedulerDataSource({ 
         data: schedulerData() 
        }); 
        scheduler.setDataSource(dataSource); 
       } 

但我不知道为什么,不知道为什么observable array没那个工作:(

参考:Kendo Scheduler - Click Drop Down Menus Check it out - Configuration, Fields, Methods, Events :)