首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带角的Kendo动态DataSource

带角的Kendo动态DataSource
EN

Stack Overflow用户
提问于 2014-10-14 00:18:06
回答 1查看 3.8K关注 0票数 3

我的页面上有一个Kendo Scheduler。

代码语言:javascript
复制
<div kendo-scheduler k-options="schedulerOptions" k-data-source="items"></div>

我的角控制器将调用服务器来获取数据,它看起来是这样的,但是在加载($scope.$watch)之前,我不知道我的URL参数是什么。

代码语言:javascript
复制
$scope.$watch(function () { return MyService.leadID; }, function (newValue) {
    if (newValue) {
        getAppointmentsTabData(newValue);
    }
});

var getAppointmentsTabData = function (leadID) {
    MyService.getAppointmentsTabData(leadID)
       .then(function (data) {
            $scope.items = data;
           }
       }
   );
};

如何将这些数据绑定到我的Kendo Scheduler?

我可以让这个Scheduler处理静态数据,但不能让服务器发送对象时返回的JSON列表。我希望能够将我的$scope.items绑定到dataSource,但这似乎不起作用。

这是schedulerOptions代码。

代码语言:javascript
复制
$scope.schedulerOptions = {
    date: new Date("2014/10/13"),
    startTime: new Date("2014/10/13 07:00 AM"),
    height: 310,
    views: [
        "agenda",
        { type: "week", selected: true, allDaySlot: false },
        { selectedDateFormat: "{0:dd-MM-yyyy}" }
    ],
    eventTemplate: "<span class='custom-event'>{{dataItem.title}}</span>",
    allDayEventTemplate: "<div class='custom-all-day-event'>{{dataItem.title}}</div>",
    timezone: "Etc/UTC",
    dataSource: {
        data: $scope.items,
        schema: {
            model: {
                id: "id",
                fields: {
                    id: { from: "ID", type: "number" },
                    appointmentId: { from: "AppointmentId", type: "number" },
                    resource: { from: "Resource", type: "number" },
                    description: { from: "Description" },
                    isAllDay: { type: "boolean", from: "IsAllDay" },
                    end: { from: "End", type: "date" },
                    start: { from: "Start", type: "date" },
                    title: { from: "Title", defaultValue: "No title" },
                    startTimezone: { from: "StartTimezone" },
                    endTimezone: { from: "EndTimezone" },
                    recurrenceRule: { from: "RecurrenceRule" },
                    recurrenceException: { from: "RecurrenceException" },
                }
            }
        },
    }
};

我可以让静态方法开始工作。我不能真正使用如下所示的远程数据方法,因为在触发$scope.$watch之前,我不知道我的URL是什么。我需要附加查询字符串参数。

代码语言:javascript
复制
 dataSource: {
    batch: true,
    transport: {
        read: {
            url: "/MyController/GetMyData",
            dataType: "json",
        },

有人对我如何动态填充调度程序dataSource有任何建议吗?

我见过这个问题,Kendo update scheduler options dynamically,但是我没有得到setOptions()的任何运气。如果我能调用$scope.myScheduler.setOptions("dataSource",myJsonObjectArry),那就太棒了,但什么也没有。

我能够操作$scope.myScheduler._data (作为数组),但我需要某种形式的刷新方法来重新绘制UI。不过,这种做法似乎不太正确。

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-16 14:04:27

我在回答我自己的问题。如果你遇到这种情况,我就是这样解决的。

这是我的schedulerOptions。注意,这里没有dataSource集,也没有模式。这是因为我将用我自己的dataSource动态地填充它。

代码语言:javascript
复制
$scope.schedulerOptions = {
    date: new Date("2014/10/13"),
    startTime: new Date("2014/10/13 07:00 AM"),
    showWorkHours: true,
    height: 310,
    views: [
        "agenda",
        { type: "week", selected: true, allDaySlot: false },
        { selectedDateFormat: "{0:dd-MM-yyyy}" }
    ],
    edit: $scope.edit,
    editable: {
        template: $("#editor").html()
    },
    timezone: "Etc/UTC",
    dataSource: {
        data: [], // will be set dynamically
    }
};

当我的数据被返回到这个js控制器时,我将调用它。

代码语言:javascript
复制
$scope.myScheduler.dataSource.data(getSchedulerEvents($scope.data.items));

这反过来又会调用它,为我创建dataSource。

代码语言:javascript
复制
var getSchedulerEvents = function (items) {
    var result = [];
    var event;

    for (var i = 0, length = items.length; i < length; i++) {
        event = items[i];

        result.push(new kendo.data.SchedulerEvent({
            id: event.ID,
            title: event.Title,
            description: event.Description,
            start: kendo.parseDate(event.Start),
            end: kendo.parseDate(event.End),
            isAllDay: event.IsAllDay,
            recurrenceException: event.RecurrenceException,
            recurrenceId: event.RecurrenceId,
            recurrenceRule: event.RecurrenceRule,
            resource: event.Resource,
        }));
    }
    return result;
}

如果你遇到这个问题,希望这能有所帮助。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26350864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档