現在、REST + AngularJS アプリケーションに取り組んでいます。
リソース保存アクションの約束に関して少し問題があります。
私の工場:
App.factory('Course', function($resource) {
var course = $resource('/AppServer/admin/courses/:courseId', {}, {});
course.findAll = function() {
return course.query();
};
course.findById = function(id) {
return course.get({
courseId : id
});
};
course.saveCourse = function(course) {
return course.$save();
}
return course;
});
私のコントローラー:
App.controller('CourseEditController', function($scope, $routeParams, $location, Course, FlashMessage) {
// load course into edit form
$scope.course = Course.findById($routeParams.courseId);
// save edited course and print flash message
$scope.saveCourse = function() {
var savedCourse = Course.saveCourse($scope.course);
savedCourse.$then(function(httpResponse) {
FlashMessage.set("Die Änderungen am Kurs <i>" + savedCourse.title + "</i> wurden erfolgreich gespeichert.");
$location.path("/kurse/verwalten");
});
}
});
問題は、次の例外が発生することです。
TypeError: Cannot call method '$then' of undefined
奇妙なことに、ファインダーの 1 つ (findById など) に同じ then-callback を追加すると、すべて正常に動作します。ただし、「return course.get({courseId:id});」の戻り値と比較して、「return course.$save()」の戻り値は未定義です。これが「オブジェクト オブジェクト」です。
私が望むのは、保存アクションが完全に実行されたときに FlashMessage を設定することです。
これに関するアイデアはありますか?REST サービスからの応答は正しいです。保存されたオブジェクトを返します。
マークに挨拶