2016-04-25 12 views
0

Ich habe einen Fehler mit einem Versprechen. Ich versuche angular-tree-dnd zu verwenden, aber ich habe ein Problem mit einem Versprechen.Geben Sie ein Versprechen mit einem Modell und einem Service zurück

von meinem Controller:

project.getAll().then(function(results) { 
    var projects = results; 

    $scope.results = []; 

    angular.forEach(projects, function(result) { 
     $scope.results.push(project.build(result)); 
    }); 

    return $scope.results; 
}); 

$scope.tree_data = $TreeDnDConvert.line2tree($scope.results, 'id', 'ParentId'); 

mein Modell:

var Project = function(properties) { 
    // Model 
    this.description = null; 
    this.file = null; 
    this.name = null; 
    this.ParentId = null; 
    this.path = null; 

    angular.extend(this, properties); 
}; 

Project.prototype.setModel = function(obj) { 
    angular.extend(this, obj); 
}; 

Project.prototype.getAll = function() { 
    return ProjectService.getAll(); 
}; 

Project.prototype.build = function(data) { 
    var project = new Project(data); 

    return project; 
}; 

meinen Dienst (mit $ WebSQL):

this.getAll = function(params) { 
    var projects = []; 
    return db.selectAll('projects').then(function(results) { 
     for (var i = 0; i < results.rows.length; i++) { 
      projects.push(results.rows.item(i)); 
     } 
     return projects; 
    }); 
}; 

Ich habe keinen Fehler, aber mein Haus ist leer.

habe ich versucht, dies:

project.getAll().then(function(results) { 
    var projects = results; 

    $scope.results = []; 

    angular.forEach(projects, function(result) { 
     $scope.results.push(project.build(result)); 
    }); 

    return $scope.results; 
}).then(function(array) { 
    $scope.tree_data = $TreeDnDConvert.line2tree(array, 'id', 'ParentId'); 
}); 

Aber ich habe diesen Fehler:

angular.min.js:13550 TypeError: Cannot read property '__children__' of undefined 
    at Object._$initConvert.line2tree (ng-tree-dnd.js:1456) 

Ich denke, dass mein Array

+0

Wo ist 'project.build' definiert? Was gibt es zurück? Ich denke, das ist der Kern Ihres Problems. – JLRishe

+0

In meinem Modell habe ich meinen Code –

Antwort

1

Ich vermute, dass dies die Wurzel des Problems ist:

"ParentId":"null" 

Beide der Elemente auf dem Baum eine ParentId mit dem"null"String-Wert haben. Das bedeutet wahrscheinlich, dass die Bibliothek dnd nach einem Knoten mit der ID "null" sucht, der nichts findet und versucht, auf die __children__-Eigenschaft auf diesem undefined-Wert zuzugreifen.

Die Lösung: fixieren Sie die Daten in Ihrem DB, so dass die übergeordneten IDs tatsächlich Nullwerte sind und nicht den Wert "null".

+0

Sie hatten Recht! Vielen Dank ! –

0

Guter Abend leer ist) Bitte setzen Sie einen Haltepunkt oder die Verwendung debugger, alert, console.log mit JSON.stringify(array), vor Ihrer letzten Operation:

$scope.tree_data = $TreeDnDConvert.line2tree(array, 'id', 'ParentId') 

(letzte Version mit dann und Fehler).

Ich denke, Sie haben richtige Array und Ärger nicht in Versprechen, aber in line2tree Syntax.

+0

mit diesem console.log (JSON.stringify (array)) aktualisiert; Ich habe das: [{"description": null, "Datei": "/ release.txt", "Name": "CRM", "ParentId": "null", "Pfad": "crm-site.net" , "id": 6334, "erstellt": "2016-04-25 19:01:32"}, {"description": null, "Datei": "/ release.txt", "Name": "CRM PREPROD "," ParentId ":" null "," Pfad ":" crm-site.net "," id ": 9856," erstellt ":" 2016-04-25 19:01:32 "}]. Aber wenn ich direkt mein Array $ array = [{"id": 1, "ParentId": null, etc ..}, {}] vor $ TreeDnDConvert.line2tree deklariert es funktioniert ... –

+1

Vielleicht Problem in null? Wenn Sie direkt deklarieren - null - ist JS-Wert. Aber auf console.log Array (von db zurückgegeben) - es ist String ("null"). –

+0

Ja!Ich aktualisierte "ParentId": "null" von "ParentId": null, es funktioniert! –