First of all,I would say sorry for my broken English and the broken codes...(many words here come from google translation...so, I\'m afraid that I can\'t make myself clear...so,
Well ,I figure out why the Loader for resolve doesn't work as expected... The key is that an angularjs service is a sigleton. It doesnt work because I put the loop inside the service definition in the first version...
for sort, this works:
angular.forEach [
['profile', 'profile']
['user', 'users']
['avatar', 'avatars']
],
(resouce_definition)->
resource = resouce_definition[1]
singular = resouce_definition[0]
captialize = singular.charAt(0).toUpperCase() + singular.slice(1)
app.factory("#{captialize}Loader", [
'RESTful', '$route', '$q'
(RESTful, $route, $q)->
(action)->
delay = $q.defer()
id = $route.current.params.id
fetcher = RESTful(resource)
switch action
when 'index'
fetcher.index
page: $route.current.params.page
(response, headers)->
delay.resolve
resource: response
pages: JSON.parse(headers('X-Pagination'))
(response)->
delay.reject "Unable to fetch #{resource} index"
when 'show'
fetcher.get
id: id
(response)->
delay.resolve(response)
(response)->
delay.reject "Unable to fetch #{resource} #{id}"
when 'edit'
fetcher.edit
id: id
(response)->
delay.resolve(response)
(response)->
delay.reject "Unable to fetch #{resource} #{id}"
when 'new'
fetcher.get
id: 'new'
(response)->
delay.resolve(response)
(response)->
delay.reject "Unable to fetch #{resource} new"
return delay.promise
])