내 프로젝트는 AngularJS + Django Tasypie를 사용합니다. 나는 아래에 게시 한 CoffeeScript 코드로 양식 제출을 처리하고 있습니다. Angular로 개발하기 시작한 이래로 나는 개선을위한 제안을 원합니다. 어쩌면 서비스 및/또는 $ 자원의 사용? "프로젝트"엔티티에는 oneToMany "클라이언트"관계가 있음을 알아 두는 것이 중요합니다.관련 모델이 AngularJS에있는 양식 제출을 처리하는 가장 좋은 방법은 무엇입니까?
감사합니다.
일반 모델 클래스 :
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()