AngularJS getId保存资源

时间:2013-04-17 10:14:52

标签: scala resources angularjs playframework-2.0

我是AngularJS的新手,我的问题是,当我使用资源保存任务时,它会将信息正确地发送到数据库。收到POST时服务器响应创建的任务ID。

我有类似的东西

$scope.save = function(){     
        var retorno = Task.save($scope.task);
        console.log("Retorno = "+retorno);
        $scope.tasks.push($scope.task);
}

控制台中的retorno值是Retorno = [object Object]

id来自这里

def newTask = SecuredAction { implicit request =>
    println("TaskController.newTask")
    taskForm.bindFromRequest.fold(
      errors =>
        BadRequest(views.html.tasks(request.user, Task.all(request.user.id.id), errors, errors)),
      _publicTask => {
        val id = Task.create(_publicTask.label,request.user.id.id, _publicTask.date)
        //Redirect(routes.TaskController.tasks())
        id match{
          case Some(_id) => Ok(_id.toString).as("application/json")
          case None => Ok("error")
          case _ => Ok("ERROR")
        }
      }
    )
  }

返回类似这样的内容

516e750ee4b0230023ba5acc

那么,如何在控制器中处理此返回。 顺便说一句,我想要这样,因为当我推送任务时,它没有ID,因此无法在不刷新页面的情况下删除。

1 个答案:

答案 0 :(得分:0)

Angular docs on $resource表示

  

重要的是要意识到调用$ resource对象方法会立即返回一个空引用(对象或数组,具体取决于isArray)。从服务器返回数据后,将使用实际数据填充现有引用。

所以而不是

var retorno = Task.save($scope.task);
$scope.tasks.push($scope.task);

你应该采用回调方式

var retorno = Task.save($scope.task, function() {
    // here retorno should already have ID in it
    // and you may want to set it to a task
    $scope.tasks.push($scope.task); 
});