2014-06-12 5 views
5

Ich benutze angular-ui-Kalender in meiner Website. In der Steuerung, ich habe diese writed:AngularJS + Vollkalender senden Fehler TypeError: Kann die Eigenschaft '__id' von undefined nicht lesen

define(['underscore'], function (_) { 
    "use strict"; 

    var SearchController = function ($scope, $location, OrdersService, UsersService) { 

     /* config object */ 
     $scope.uiConfig = { 
      calendar: { 
       height: 450, 
       editable: true, 
       firstDay: 0, 
       monthNames: ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'], 
       monthNamesShort: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'], 
       dayNames: ['Domingo', 'Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sabado'], 
       dayNamesShort: ['Dom', 'Lun', 'Mar', 'Mie', 'Jue', 'Vie', 'Sab'], 
       header: { 
        left: '', 
        center: 'title', 
        right: '' 
       } 
      } 
     }; 
     $scope.eventSources = [$scope.events]; 

     var getTecnicians = function() { 
      UsersService.getTechs().then(function (techs) { 
       $scope.technicians = techs; 
      }); 
     }; 

     var search = function() { 
      var searchObject = $scope.$$childHead.searchForm; 
      UsersService.getCurrentStatus(searchObject.technician._id, searchObject.selectedStartDate).then(function (result) { 
       $scope.states = result[0].states; 
       for (var i = 0; i < $scope.states.length; i++) { 
        var event = {}; 
        if (i === $scope.states.length - 1) { 
         event = { 
          title: $scope.states[i].status, 
          start: $scope.states[i].date, 
          allday: true 
         }; 
        } else { 
         event = { 
          title: $scope.states[i].status, 
          start: $scope.states[i].date, 
          end: $scope.states[i + 1].date 
         }; 
        } 
        $scope.events.push(event) 
       } 
       if (result) { 
        $scope.haveData = true; 
       } 
      }); 
     }; 

     var init = function() { 
      $scope.search = search; 
      $scope.getTecnicians = getTecnicians(); 
      $scope.haveData = false; 
      $scope.events = []; 
     }; 
     init(); 
    }; 

    SearchController.$inject = ["$scope", "$location", "OrdersService", "UsersService"]; 

    return SearchController; 
}); 

Wenn ich in einer Schaltfläche i eine GET-Anfrage klicken Sie tun und Daten vom Server, zu verarbeiten bekommen und Ereignisse objets und setzte in meinem Rahmen erzeugen.

Wenn ich es fertig, Kalender zeigen Sie mir diesen Fehler:

ypeError: Cannot read property '__id' of undefined 
    at sourcesFingerprint (http://localhost:8000/bower_components/angular-ui-calendar/src/calendar.js:48:24) 
    at Object.changeWatcher.getTokens (http://localhost:8000/bower_components/angular-ui-calendar/src/calendar.js:88:21) 
    at Scope.$get.Scope.$digest (http://localhost:8000/bower_components/angular/angular.js:12243:40) 
    at Scope.$get.Scope.$apply (http://localhost:8000/bower_components/angular/angular.js:12516:24) 
    at done (http://localhost:8000/bower_components/angular/angular.js:8204:45) 
    at completeRequest (http://localhost:8000/bower_components/angular/angular.js:8412:7) 
    at XMLHttpRequest.xhr.onreadystatechange (http://localhost:8000/bower_components/angular/angular.js:8351:11) 

benötige ich ein _id auf Ereignisse setzen ..?

+0

irgendein Update? Ich bekomme den gleichen Fehler –

+0

mögliche Duplikate von [angularjs add Wert kann nicht Eigenschaft 'ID' von undefined] (http://stackoverflow.com/questions/24699081/angularjs-add-value-cannot-set-property-id -von-undefiniert) –

Antwort

5

habe ich den gleichen Fehler, eine Möglichkeit, es zu beheben ist, initiliaze das Ereignis Array $ scope.events = [] und dann die HTTP-Anforderung machen

0

Mit dieser Referenz:

searchObject.technician.__id 

ohne searchObject.technician definiert, das Problem ist.

0

Dies ist ein Fehler von ui-calendar (here). Hast du das ng-Modell-Attribut für den u-calendar hinzugefügt?

<div ui-calendar ng-model="eventSources"></div> 

Auch nach init(), Es scheint $scope.events ist ein leeres Array zu sein. Also ich denke du kannst es direkt weitergeben.

$scope.eventSources = $scope.events; // this is an array. 
0

ich in das gleiche Problem lief. Es kommt auf die Reihenfolge an, in der Sie alles definieren. Um sicher zu sein, sollten Sie Ihre Ereignisquellen am besten deklarieren.

Html:

<div ui-calendar ng-model="eventSources"></div> 

Controller:

$scope.events = [ 
    {title: 'Long Event',start: new Date()} 
]; 
$scope.eventSources = [$scope.events];