私のプロジェクトでは AngularJS + Django Tasypie を使用しています。以下に投稿した CoffeeScript コードを使用して、フォームの送信を処理しています。Angular で開発を始めたばかりなので、改善点を教えてください。サービスや $resource の使用でしょうか。"Project" エンティティには oneToMany "Client" 関係があることに注意してください。
ありがとうございました。
汎用モデル クラス:
class window.Model
constructor: (options) ->
@$scope = options.$scope
@$http = options.$http
@id = if options.id? then options.id
fetch: (cb= ->) =>
@$http.get(@url + '/' + @id).success (data) =>
@toScope(data)
cb(data)
fetchAll: (cb= ->) =>
@$http.get(@url).success (data) =>
@toScopeAll(data)
cb(data)
save: (data, cb= ->) ->
@update data, cb if @id? else @create data, cb
create: (cb= ->) ->
@$http.post(@url + '/', @fromScope()).success cb
update: (cb= ->) =>
@$http.put(@url + '/' + @id, @fromScope()).success cb
remove: (cb= ->) ->
@$http.delete(@url + '/' + @id).success cb
プロジェクト/クライアント モデル クラス:
class window.ProjectModel extends Model
url: '/api/project'
toScope: (data) =>
@$scope.project = data
@$scope.client = @$scope.project.client.id
fromScope: (data) =>
id: @$scope.project.id
name: @$scope.project.name
client: id: @$scope.client
class window.ClientModel extends Model
url: '/api/client'
toScopeAll: (data) =>
@$scope.clients = [id: '0', name: 'Choose...'].concat data.objects
コントローラーコード:
window.ProjectCtrl = ($scope, $routeParams, $http) ->
redirect = -> window.location = '#/projects'
$scope.save = -> project.save redirect
$scope.delete = -> project.remove redirect
$scope.cancel = redirect
$scope.client = '0'
client = new ClientModel($scope: $scope, $http: $http)
client.fetchAll()
project = new ProjectModel($scope: $scope, $http: $http)
if $routeParams.projectId?
$scope.formType = 'update'
project.id = $routeParams.projectId
project.fetch()