0

books_ctrl.js.coffee

myApp.controller "BooksCtrl", ($scope, Book) ->
  $scope.getBooks = () ->
    $scope.books = Book.query()

パート A: 初期コード:

  $scope.delete = (book) ->
    book.$delete()
    $scope.getBooks()

パート A: @apneadiving による解決策:

  $scope.delete = (book) ->
    book.$delete {}, ->
      $scope.getBooks()
      return

パート B: 初期コード:

  $scope.save = () ->
    if $scope.book.id?
      Book.update($scope.book)
    else
      Book.save($scope.book)
    $scope.book = {}
    $scope.getBooks()

パート B: 保留中のソリューション: 最初に保存または更新をそれぞれ完了し、完了時にのみ getBooks() で開始するように Angular に指示するにはどうすればよいですか? こちらを参照してください。

...

book.js.コーヒー

myApp.factory "Book", ($resource) ->
  $resource("/books/:id", {id: "@id"}, {update: {method: "PUT"}})

books_controller.rb

  # GET /books
  def index
    @books = Book.all

    respond_to do |format|
      format.html {}
      format.json {render json: @books, each_serializer: BookSerializer}
    end
  end

  # DELETE /books/1
  def destroy
    @book.destroy

    respond_to do |format|
      format.html {redirect_to books_url, notice: 'Book was successfully destroyed.'}
      format.json {render json: {message: "Book was deleted."}}
    end
  end

Rails サーバー開発ログ

Started GET "/books" for 127.0.0.1 at 2014-07-03 12:53:07 +0200
Processing by BooksController#index as JSON
  Book Load (0.0ms)  SELECT "books".* FROM "books"
Completed 200 OK in 2ms (Views: 2.0ms | ActiveRecord: 0.0ms)


Started POST "/books" for 127.0.0.1 at 2014-07-03 12:53:07 +0200
Processing by BooksController#create as JSON
  Parameters: {"title"=>"Test", "author"=>"Tester", "book"=>{"title"=>"Test", "author"=>"Tester"}}
   (0.0ms)  begin transaction
  SQL (1.0ms)  INSERT INTO "books" ("author", "created_at", "title", "updated_at") VALUES (?, ?, ?, ?)  [["author", "Tester"], ["created_at", "2014-07-03 10:53:07.627400"], ["title", "Test"], ["updated_at", "2014-07-03 10:53:07.627400"]]
   (23.0ms)  commit transaction
Completed 200 OK in 29ms (Views: 1.0ms | ActiveRecord: 24.0ms)

ここに私の問題があります: AngularJS はすべてのリクエストを同時に実行しているようです。そうすれば、GET-Request は -Request の前に実行されPOSTます。これは、私の場合は望ましくない効果です。

Angular に完了GET後にのみ実行するように指示するにはどうすればよいですか?POST

4

1 に答える 1

0

私はするだろう:

book.$delete({}, function(){ $scope.getBooks(); })

あるいは:

book.$delete({}, $scope.getBooks)

したがって、注文を完全に制御できます

于 2014-07-03T08:20:40.587 に答える