首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有AngularJS的Kendo UI调度器-自定义编辑模板中的更新问题

带有AngularJS的Kendo UI调度器-自定义编辑模板中的更新问题
EN

Stack Overflow用户
提问于 2015-06-26 18:00:53
回答 1查看 2.3K关注 0票数 1

我们在议程视图中使用带有自定义字段的自定义编辑器模板。我们有一个编辑按钮,它触发调度器的editEvent。问题是,当我们更新事件时,它不会触发更新操作。

正如您所看到的,在“添加新事件”的情况下,它工作得很好。此外,在编辑“带有序列的重复事件”案例时,它会根据需要触发更新操作。

唯一的问题是,在编辑单个事件(全天事件或非重复事件)时,不会触发更新操作。

有没有人有解决这个问题的办法?

Here是telerik的dojo中演示的链接:

HTML:

代码语言:javascript
复制
<div id="example" ng-app="KendoDemos">
    <div ng-controller="MyCtrl">

        <div class="thisTab clickhereTabScheduledcont boxWrapper">
            <div class="agenda" style="position:relative;">
                <div kendo-toolbar k-options="toolbarOptions" class="newEvent" id="toolbar" ng-click="schedulerOptions.addEvent()"></div>

                <div kendo-scheduler="scheduler" k-options="schedulerOptions">

                 <span k-event-template class='custom-event'>
                    <span>{{dataItem.title}}</span>
                    <hr>
                    <i class="fa fa-pencil" ng-click="schedulerOptions.editEvent(dataItem)">Edit</i>
                </span>

                <div k-all-day-event-template class='custom-all-day-event'>{{dataItem.title}}</div>
            </div>
        </div>

    </div>  
</div>

脚本部分:

代码语言:javascript
复制
<script>

      angular.module("KendoDemos", [ "kendo.directives" ])
      .controller("MyCtrl", function($scope){

          $scope.toolbarOptions = {
            items: [
            { type: "button", text: "New Event" }
            ]
        };

        $scope.schedulerOptions = {
         date: new Date("2013/6/13"),
         startTime: new Date("2013/6/13 07:00 AM"),
         height: 600,

         views: [
         "agenda"
         ],
         timezone: "Etc/UTC",

         editable: {
            template: kendo.template($("#customEditorTemplate").html())
        },

        dataSource: {
            batch: true,
            transport: {
                read: {
                  url: "http://demos.telerik.com/kendo-ui/service/tasks",
                  dataType: "jsonp"
              },
              update: {

                 url: function (data) {
                    alert(JSON.stringify(data));
                    return "http://demos.telerik.com/kendo-ui/service/tasks/update";
                },

                dataType: "jsonp"
            },
            create: {
             url: function (data) {
                alert(JSON.stringify(data));
                return "http://demos.telerik.com/kendo-ui/service/tasks/create";
            },
        },
        destroy: {
            url: "http://demos.telerik.com/kendo-ui/service/tasks/destroy",
            dataType: "jsonp"
        },
        parameterMap: function(options, operation) {

          alert(operation);

      }
    },
    schema: {
        model: {
            id: "taskId",
            fields: {
                taskId: { from: "TaskID", type: "number" },
                title: { from: "Title", defaultValue: "No title", validation: { required: true } },
                start: { type: "date", from: "Start" },
                end: { type: "date", from: "End" },
                startTimezone: { from: "StartTimezone" },
                endTimezone: { from: "EndTimezone" },
                description: { from: "Description" },
                recurrenceId: { from: "RecurrenceID" },
                recurrenceRule: { from: "RecurrenceRule" },
                recurrenceException: { from: "RecurrenceException" },
                ownerId: { from: "OwnerID", defaultValue: 1 },
                isAllDay: { type: "boolean", from: "IsAllDay" }
            }
        }
    },
    filter: {
        logic: "or",
        filters: [
        { field: "ownerId", operator: "eq", value: 1 },
        { field: "ownerId", operator: "eq", value: 2 }
        ]
    }
    },


    editEvent: function (dataItem) {

        alert(JSON.stringify(dataItem));
        $scope.scheduler.editEvent(dataItem);

    },

    addEvent: function () {
        $scope.scheduler.addEvent({title: ""});
    }

    };
    })


</script>
EN

回答 1

Stack Overflow用户

发布于 2015-10-08 18:04:45

好的,我想首先我们将在编辑api中传递调度程序事件函数,你可以通过eventId或者你喜欢的方式调用function.Then。我已经做过这样的事情了

这是您的html模板

代码语言:javascript
复制
    <div class="thisTab clickhereTabScheduledcont boxWrapper">
        <div class="agenda" style="position:relative;">
            <div kendo-toolbar k-options="toolbarOptions" class="newEvent" id="toolbar" ng-click="schedulerOptions.addEvent()"></div>

            <div kendo-scheduler="scheduler" k-options="schedulerOptions">

             <span k-event-template class='custom-event'>
                <span>{{dataItem.title}}</span>
                <hr>
                <i class="fa fa-pencil" ng-click="schedulerOptions.editEvent($event,$event.isRecurrenceHead())">Edit</i>
            </span>

            <div k-all-day-event-template class='custom-all-day-event'>{{dataItem.title}}</div>
        </div>
    </div>

</div>  

这是您的控制器

代码语言:javascript
复制
  //you can pass scheduler default function in edit function

 var editEventDetails  ={};
       update: {
                url: function (data) {
                    console.log('update function');
                    var dt;

                        data.SignUpDueDate = moment(data.SignUpDueDate).format('YYYY-MM-DD') + "T23:59:59" + ".000Z";
                        data.ProgramTemplateId = editEventDetails.ProgramTemplateId;
                        data.IsTeamEvent = editEventDetails.IsTeamEvent;
                        data.SeasonTeamId = editEventDetails.SeasonTeamId;
                        data.Description = editEventDetails.Description;
                        data.CheckAttendance = editEventDetails.CheckAttendance;
                        data.Remarks = editEventDetails.Remarks;
                        data.IsSignUpRequired = editEventDetails.IsSignUpRequired;


                    API.post('/Scheduler/SaveProgramEvent', data).then(function (result) {

                    }

                    },
            },

 editEvent: function (evt) {
        var uid = $(evt.target).closest('.k-task').attr("data-uid");
        var event = $scope.scheduler.occurrenceByUid(uid);          
        event.startDate = moment(event.start).format('MM/DD/YYYY h:mm a');
        event.endDate = moment(event.end).format('MM/DD/YYYY h:mm a');
        dataItem.startDate = moment(event.start).format('MM/DD/YYYY h:mm a');
        dataItem.endDate = moment(event.end).format('MM/DD/YYYY h:mm a');
        $scope.scheduler.editEvent(event);
    },


  edit: function (e) {
        console.log('EDIT');

        if (e.event.eventMetaId != null && e.event.eventMetaId != undefined && e.event.eventMetaId != 0) {
            var detailParams = {
                EventMetaId: (e.event.recurrenceId !== 0 && e.event.eventMetaId === 0) ? e.event.recurrenceId : e.event.eventMetaId,
                OwnerOrganizationId: _orgId,
                UserTimezone: global.userTimezoneOffset// userTimezone
            };
            API.get('/Scheduler/GetEventDetailById', detailParams).then(function (data) {
                editEventDetails = data;
                mapEventDetail(editEventDetails, e.event)
            });               
            setTimeout(function () {
                e.event.startDate = moment(e.event.start).format('MM/DD/YYYY h:mm a');
                e.event.endDate = moment(e.event.end).format('MM/DD/YYYY h:mm a');
                e.event.recurrenceException = editEventDetails.recurrenceException;
                $scope.$apply();
            }, 0);
        }

    },

这里的mapEventDetail是映射函数、数据库和调度器模型,您可以像这样使用mapEventDetail:--

代码语言:javascript
复制
 var mapEventDetail = function (fromObj, toObj) {
    toObj.programTemplateId = fromObj.ProgramTemplateId;
    toObj.isTeamEvent = fromObj.IsTeamEvent;
    toObj.seasonTeamId = fromObj.SeasonTeamId;
    toObj.description = fromObj.Description;
    toObj.checkAttendance = fromObj.CheckAttendance;
    toObj.remarks = fromObj.Remarks;        
    return toObj;

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

https://stackoverflow.com/questions/31070321

复制
相关文章

相似问题

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