使用远程数据更新Kendo UI调度程序数据源(Javascript)

时间:2014-07-17 12:04:36

标签: json kendo-ui datasource scheduler

我在使用kendo ui scheduler组件时遇到了一些问题。

我通过php exchange web服务从ms exchange获取我的调度程序事件。由于性能原因,我不想在日历init上加载数千个元素。

因此我默认只加载电流的周项目。在导航事件中,我想更新调度程序数据源。

我的代码是:

$("#scheduler").kendoScheduler({
    date: new Date(y+"/"+m+"/"+d),
    dateHeaderTemplate: kendo.template("<strong>#=kendo.toString(date, 'ddd, dd.MM.')#</strong>"),
    startTime: new Date(y+"/"+m+"/"+d+" 00:00 AM"),
    workDayStart: new Date(y+"/"+m+"/"+d+" 07:00 AM"),
    workDayEnd: new Date(y+"/"+m+"/"+d+" 8:00 PM"),
    height: 600,
    navigate: schedulerNavigate,
    views: [
        "day",
        "week",
        { type: "workWeek", selected: true },
        "month",
        "agenda"
    ],
    dataSource: {
        batch: true,
        transport: {
            read: {
                url: myDataUrl,
                dataType: "json"
            }
        }
    }
    ...and some more options here...
});

“Naviagte”事件调用schedulerNavigate()函数:

function schedulerNavigate(e) {
    var
        scheduler = $("#scheduler").data("kendoScheduler"),
        dataSourceUrl = myDataUrl+kendo.format("?view={1}&date={2:d}", e.action, e.view, e.date),
        dataSource = new kendo.data.SchedulerDataSource({
            transport: {
                read: {
                    url: dataSourceUrl,
                    dataType: "json"
                }
            }
    });

    // set datasource
    scheduler.setDataSource(dataSource);
}

当输入schedulerNavigate函数时,将调用dataSource url,将返回json。到目前为止,每件事都很好...... 但是:网址将被调用两次!调度程序的数据将被清除,但不会设置新数据。

有什么想法吗?

非常感谢!

菲利普

1 个答案:

答案 0 :(得分:1)

要实现所需的行为,您应该启用&#34; serverFiltering&#34;调度程序的选项并使用dataSource&#34; transport.parameterMap&#34;函数包括请求的当前视图开始/结束时间:

dataSource: {
serverFiltering: true,
transport: {

    parameterMap: function (options, operation) {                        

        if (operation === "read") {
            var scheduler = $("#scheduler").data("kendoScheduler");

            var result = {
                start: scheduler.view().startDate(),
                end: scheduler.view().endDate()
            }

            return kendo.stringify(result);
        }

        return kendo.stringify(options);
    },
    //CRUD operations

使用MVC后端的Runnable演示: