2016-08-05 4 views
0

2つのレコードを順番に保存しようとしています。最初のレコードのIDを2番目のレコードの参照として使用しようとしています。ここにはどんなものかが表示されます。

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

私は新しい部門を選択したり作成したりすることができます。 私のコントローラは、この

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

のように見えますが、$ scope.deptIdは常にnullです。

私はAngularjsの初心者であり、助けていただければ幸いです。 :D

答えて

0

コードを見ると、Department.saveはおそらく非同期です。

このようなものを試すことができますか?

.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 
     } 

    }; 
    }); 

コードの残りの部分はわかりませんが、あなたのニーズに合わせて作成したこの「約束」と呼ぶべきです。 dept_idを設定するまで "Department.save"がサーバーから戻るまで待たなければならないことを示したかっただけです。

私は初心者でもテストしていません。それがあなたを助けることを願って! :)