为剑道调度程序更新/重新分配创建KO绑定处理程序

Create KO Binding Handlers for kendo Scheduler Update / Re-Assign

本文关键字:创建 分配 KO 绑定 程序 处理 调度程序 更新 新分配      更新时间:2023-09-26

我在项目中为kendo Scheduler使用Knockout-kendo.js绑定。

在Scheduler中,我也使用了水平分组。所以,在这里我使用了DataSource and well as Resources with group.

我已经声明了我的变量,如下所示:

monitorData = ko.observableArray(),
schedulerData = ko.observableArray(),

我的激活方法:

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

在完成我的服务调用之前,将返回activate方法。在这里,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

我知道,如果在初始化初始数据后分配可观察的数组数据,Kendo调度器将无法理解该数据。所以我尝试了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.

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

如何为kendoScheduler Update/InInit编写ko.bindingHandlers

无需编写Ko BindHandlers

我刚刚从getschedulerData()方法分配了我的dataSource。同样,当我第一次加载时,Call是async: false。现在我打了sync的电话。因此,activate method will not be returned until otherwise the call get finished

以下是我用来替换DataSource的代码:

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

但我不知道为什么observable array不起作用:(

参考:Kendo Scheduler-点击下拉菜单查看-配置、字段、方法、事件:)