类型错误: 无法读取未定义的属性'getTime'



我在angularjs中使用DayPilot日历时遇到了一个问题。

https://code.daypilot.org/63034/angularjs-event-calendar-open-source

当我下载源代码并使用它时,它不工作并抛出错误

angular.js:9563 TypeError: Cannot read property 'getTime' of undefined
    at loadEvents (daypilot-all.min.js:11)
    at update (daypilot-all.min.js:11)
    at Object.fn (daypilot-all.min.js:11)
    at h.$digest (angular.js:12031)
    at h.$apply (angular.js:12279)
    at g (angular.js:7991)
    at C (angular.js:8196)
    at XMLHttpRequest.y.onreadystatechange (angular.js:8137)

下载代码的源代码为

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>DayPilot: AngularJS Event Calendar</title>
        <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script>
<script src="js/daypilot/daypilot-all.min.js" type="text/javascript"></script>
        <!-- helper libraries -->
    <script src="js/jquery/jquery-1.9.1.min.js" type="text/javascript"></script>
    <!-- daypilot libraries -->
        <script src="js/daypilot/daypilot-all.min.js" type="text/javascript"></script>
        <link type="text/css" rel="stylesheet" href="media/layout.css" />    
    </head>
    <body>
        <div id="header">
            <div class="bg-help">
                <div class="inBox">
                    <hr class="hidden" />
                </div>
            </div>
        </div>
        <div class="shadow"></div>
        <div class="hideSkipLink">
        </div>
        <div class="main">
            <div ng-app="main" ng-controller="DemoCtrl" >
                <div style="float:left; width: 160px">
                    <daypilot-navigator id="navi" daypilot-config="navigatorConfig" ></daypilot-navigator>
                </div>
                <div style="margin-left: 160px">
                    <div class="space">
                        <button ng-click="showDay()">Day</button>
                        <button ng-click="showWeek()">Week</button>
                    </div>
                    <daypilot-calendar id="day" daypilot-config="dayConfig" daypilot-events="events" ></daypilot-calendar>
                    <daypilot-calendar id="week" daypilot-config="weekConfig" daypilot-events="events" ></daypilot-calendar>                
                </div>
            </div>
            <script>
                var app = angular.module('main', ['daypilot']).controller('DemoCtrl', function($scope, $timeout, $http) {
                    $scope.events = [];
                    $scope.navigatorConfig = {
                        selectMode: "day",
                        showMonths: 3,
                        skipMonths: 3,
                        onTimeRangeSelected: function(args) {
                            $scope.weekConfig.startDate = args.day;
                            $scope.dayConfig.startDate = args.day;                            
                            loadEvents();
                        }
                    };
                    $scope.dayConfig = {
                        viewType: "Day",
                        onTimeRangeSelected: function(args) {
                            var params = {
                                start: args.start.toString(),
                                end: args.end.toString(),
                                text: "New event"
                            };
                            $http.post("backend_create.php", params).success(function(data) {
                                $scope.events.push({
                                    start: args.start,
                                    end: args.end,
                                    text: "New event",
                                    id: data.id
                                });
                            });
                        },
                        onEventMove: function(args) {
                            var params = {
                                id: args.e.id(),
                                newStart: args.newStart.toString(),
                                newEnd: args.newEnd.toString()
                            };
                            $http.post("backend_move.php", params);
                        },
                        onEventResize: function(args) {
                            var params = {
                                id: args.e.id(),
                                newStart: args.newStart.toString(),
                                newEnd: args.newEnd.toString()
                            };
                            $http.post("backend_move.php", params);
                        },
                        onEventClick: function(args) {
                            var modal = new DayPilot.Modal({
                                onClosed: function(args) {
                                    if (args.result) {  // args.result is empty when modal is closed without submitting
                                        loadEvents();
                                    }
                                }
                            });
                            modal.showUrl("edit.php?id=" + args.e.id());
                        }
                    };
                    $scope.weekConfig = {
                        visible: false,
                        viewType: "Week",
                        onTimeRangeSelected: function(args) {
                            var params = {
                                start: args.start.toString(),
                                end: args.end.toString(),
                                text: "New event"
                            };
                            $http.post("backend_create.php", params).success(function(data) {
                                $scope.events.push({
                                    start: args.start,
                                    end: args.end,
                                    text: "New event",
                                    id: data.id
                                });
                            });
                        },
                        onEventMove: function(args) {
                            var params = {
                                id: args.e.id(),
                                newStart: args.newStart.toString(),
                                newEnd: args.newEnd.toString()
                            };
                            $http.post("backend_move.php", params);
                        },
                        onEventResize: function(args) {
                            var params = {
                                id: args.e.id(),
                                newStart: args.newStart.toString(),
                                newEnd: args.newEnd.toString()
                            };
                            $http.post("backend_move.php", params);
                        },
                        onEventClick: function(args) {
                            var modal = new DayPilot.Modal({
                                onClosed: function(args) {
                                    if (args.result) {  // args.result is empty when modal is closed without submitting
                                        loadEvents();
                                    }
                                }
                            });
                            modal.showUrl("edit.php?id=" + args.e.id());
                        }                        
                    };
                    $scope.showDay = function() {
                        $scope.dayConfig.visible = true;
                        $scope.weekConfig.visible = false;  
                        $scope.navigatorConfig.selectMode = "day";
                    };
                    $scope.showWeek = function() {
                        $scope.dayConfig.visible = false;
                        $scope.weekConfig.visible = true;                    
                        $scope.navigatorConfig.selectMode = "week";
                    };
                    loadEvents();
                    function loadEvents() {
                        // using $timeout to make sure all changes are applied before reading visibleStart() and visibleEnd()
                        $timeout(function() {
                            var params = {
                                start: $scope.week.visibleStart().toString(),
                                end: $scope.week.visibleEnd().toString()
                            }
                            $http.post("backend_events.php", params).success(function(data) {
                                $scope.events = data;
                            });              
                        });
                    }
                });
            </script>

        </div>
        <div class="clear">
        </div>        
    </body>
</html>
 <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script>

我还是不明白为什么这个问题一次又一次地出现

您应该检查"backend_events.php"返回的响应。DayPilot需要一个JSON格式的事件数组。如果脚本中有任何服务器端错误,则响应将返回错误消息。

很可能是服务器端的权限问题——PHP脚本需要daypilot的读/写权限。

最新更新