Создание обработчиков привязки KO для обновления/переназначения планировщика кендо

Я использую привязку 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?


person RajeshKdev    schedule 12.09.2014    source источник


Ответы (1)


Нет необходимости писать Ko BindHandlers.

Я только что назначил свой источник данных из метода getschedulerData(). Также, когда я загружался в первый раз, вызов был 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 не сработало :(

Ссылка: Планировщик кендо — щелкните раскрывающееся меню. Проверьте — Конфигурация, поля, методы, события :)

person RajeshKdev    schedule 15.09.2014