Я использую привязку Knockout-kendo.js для Kendo Scheduler в моем проекте.
В планировщике я также использую горизонтальную группировку. Итак, здесь я использовал DataSource and well as Resources with group.
Я объявил свою переменную, как показано ниже:
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 Scheduler.
Как динамически назначить источник данных и ресурс планировщика кендо. Если я назначаю наблюдаемый массив, он не работает/не назначается, как я сказал выше.
Как написать ko.bindingHandlers для kendoScheduler Update/Init?