2012-09-17 7 views
10

Mam tę aplikację Rails, która obsługuje index.html.erb przez ControllerController. W kątowym kontrolera, który obsługuje tę stronę, mam usługę $ zasobów dla Użytkownika

coffeescript

.factory('User', ['$resource', ($resource) -> 
    $resource 'api/users/:user_id/:action', {authenticity_token:app.csrf}, 
    query: 
     method: 'GET' 
     isArray: yes 
    new: 
     method: 'GET' 
     params: 
     user_id: 'new' 
    update: 
     method: 'PUT' 
]) 

a kontroler pobiera

window.app = angular.module("app", ['userServices']) 
.config(["$routeProvider", ($routeProvider) -> 
    $routeProvider 
    .when "/users", 
    templateUrl: "assets/templates/users/index.html" 
    controller: UserCtrl 

    .otherwise redirectTo: "/users" 
]) 

# users Controllers 
UserCtrl = ($scope, User) -> 
    User.query (r) -> 
    $scope.users = r 
    # code.. 

Myślę, że to dość powszechny scenariusz, ale dla tej strony potrzeba więcej niż jednej podróży do serwera. Zastanawiam się, czy istnieje sposób, aby Angular użył danych bootstrap, ponieważ zwróciły dane z akcji wywołanej w usłudze $ resource.

Zadbałem już o część danych ładowania początkowego, przypisując ją do zmiennej globalnej zwanej Gon z klejnotem Gon ruby. Wiem, że mógłbym po prostu zrobić $ scope.users = gon.users. Ale wtedy te modele użytkowników nie otrzymają takich udogodnień, jak $ scope.users [0]. $ Save()

Dziękujemy!

+0

radziłbym kopanie do źródła dla modułu i/lub zbieranie poza zasobami obiekt pobrany przez usługę $ resource. Poza tym zawsze możesz po prostu dodać własną metodę składowania $, która pobiera usługę $ http i przesyła wszystko, co jest potrzebne w twoim przypadku. –

Odpowiedz

11

Jak się okazuje, to naprawdę proste!

Dla instancji, powiedzmy, że masz wszystkie modele nie-kątowe w zmiennej _tasks i kątowym modelu zasobów $ Zadanie, wszystko co musisz zrobić, to przekazać _tasks jeden po drugim do funkcji konstruktora Zadanie takie jak to:

$scope.tasks = (new Task(task) for task in _tasks) 

następnie każdy z $ scope.tasks będą mieć wszystkie te $ update(), $ delete() metody

$scope.tasks[0].$update({due_at: new Date}) 
1

Chcesz uniknąć podróży w obie strony z User.query, prawda? Jeśli tak, jak o coś takiego

<html> 
<script type='text/javascript> 
    initialUsers = <%= User.someRubyMethod.to_json %> 
<script> 

Następnie wewnątrz kontrolerze

$scope.users = intitialUsers; 
+0

Dzięki Will. Tak, właśnie to robię teraz i to jest również problem: teraz jeden używa modelu użytkownika w zakresie, ale każdy model użytkownika nie będzie miał aktualizacji $, $ save, $ delete, która pochodzi z $ resource. Ale znajduję sposób, będę umieszczać to jako odpowiedź wkrótce –

+0

Czy kiedykolwiek znalazłeś sposób, aby to zrobić? – schultzter