2014-06-12 20 views
5

im utilizzando angolare-ui-calendario nel mio sito web. Nel controllore, ho writed questo:AngularJS + Fullcalendar inviare errore TypeError: Impossibile leggere la proprietà '__id' di indefinito

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; 
}); 

Quando faccio clic in un pulsante che faccio una richiesta GET e ottenere dati dal server, di processo e generare eventi oggetti e messo nel mio ambito.

quando ho finito di esso, il calendario mi mostra questo errore:

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) 

C'è bisogno di mettere un _id su eventi ..?

+0

ogni aggiornamento? Sto ottenendo lo stesso errore –

+0

possibile duplicato del [angularjs aggiungere valore non può impostare la proprietà 'id' di indefinito] (http://stackoverflow.com/questions/24699081/angularjs-add-value-cannot-set-property-id -of-definito) –

risposta

5

ho ottenuto lo stesso errore, un modo per risolvere il problema è, initiliaze l'array evento $ scope.events = [] e poi fare la richiesta http

0

Usando questo riferimento:

searchObject.technician.__id 

senza definire searchObject.technician è il problema.

0

Questo è l'errore da ui-calendario (here). Hai aggiunto l'attributo ng-model per ui-calendar?

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

Inoltre, dopo init(), sembra essere $scope.events è un array vuoto. Quindi penso che tu possa passare direttamente.

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

Ho incontrato lo stesso problema. Si riduce all'ordine in cui si definisce tutto. Per sicurezza, è meglio dichiarare la durata delle tue fonti di eventi.

Html:

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

Controller:

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