2016-08-05 38 views
0

Ich versuche, 2 Datensätze sequenziell zu speichern und die ID des ersten Datensatzes als Referenz im zweiten Datensatz zu verwenden. so hier ist, wie es aussieht ..

dept = {id: 1, name:"First"} 
student = {name: "a", dept_id: 1} 

jetzt habe ich Student, in welcher Form kann ich entweder wählen oder eine neue Abteilung erstellen. mein Controller sieht aus wie dieses

.controller('StudentCtrl', ['$scope', 'Student', 'Department'], function($scope, Student, Department){ 

     $scope.saveStudent = function(){ 
      getDeptId($scope.deptName); 
      var o = new Student({ 
       name: $scope.name, 
       dept_id: $scope.deptId 
      }); 
     } 

     var getDeptId = function(name) { 
      index= _.findIndex($scope.depts, {name:name}) 
      if(index === -1) { 
      // new record 
      Department.save({name:name}, function(d){ 
      $scope.deptId= d["id"] 
      }) 
      } 
      else{ 
      //existing record 
      } 
     } 
}); 

aber $ scope.deptId ist immer null.

Bitte beachten Sie, ich bin ein Neuling in Angularjs und würde jede Hilfe zu schätzen wissen. : D

Antwort

0

Wenn Sie auf Ihren Code schauen, ist Ihr Department.save wahrscheinlich asynchron.

Können Sie so etwas (unten) versuchen?

.controller('StudentCtrl', ['$scope', 'Student', 'Department'], function($scope, Student, Department) { 

    $scope.saveStudent = function() { 
     // ** Pass a function as a promise for your getDeptId: 
     getDeptId($scope.deptName, function() { 
      var o = new Student({ 
       name: $scope.name, 
       dept_id: $scope.deptId 
      }); 
     }); 
    }; 

    var getDeptId = function(name, promise) { 
     index= _.findIndex($scope.depts, {name:name}); 
     if(index === -1) { 
     // new record 
     Department.save({name:name}, function(d){ 
      $scope.deptId= d["id"]; 

      // ** Call the promise only when you receive you "id": 
      promise(); 
     }); 
     } 
     else{ 
     //existing record 
     } 

    }; 
    }); 

Ich weiß nicht, den Rest des Codes, aber ich denke, Sie sollten dieses „Versprechen“ nennen, die ich nach Ihrem Bedarf erstellt. Ich wollte Ihnen nur zeigen, dass Sie warten müssen, bis "Department.save" vom Server zurückkehrt, bis Sie dept_id gesetzt haben.

Ich habe nicht getestet, wie ich auch ein Neuling bin. Hoffe es hilft dir! :)