0

promise の関数AngularJS 1.1.5を返すフロントエンド:バックエンド:ngResource$then
Rails 3.2

問題:Card.update AngJS コントローラーの関数内からアクションを呼び出すたびに、successerror応答の両方をログに記録しようとしても応答がありません。Card$resource は、関数の外部からアクションを呼び出すときに期待どおりに動作しますCard.update

Rails 協会

Deck has_and_belongs_to_many :cards
Card has_and_belongs_to_many :decks

レールルート

resources :cards do
  get '/decks' => 'cards#decks', on: :member
end

Railsカードコントローラーの「更新」アクション

def update
  @card = Card.where( id: params[:id] ).first

  unless params[:deck_id].nil?
    @deck = Deck.where( id: params[:deck_id] ).first

    @deck.cards << @card
  end

  render json: Card.update( params[:id], params[:card] )
end

カード リソース ファクトリー

app.factory "Card", ($resource) ->
  $resource "/cards/:id",
    id: "@id"
  ,
    index:
      method: "GET"
      isArray: true

    show:
      method: "GET"
      isArray: false

    create:
      method: "POST"

    update:
      method: "PUT"

    destroy:
      method: "DELETE"

    decks:
      method: "GET"
      isArray: true
      url: 'cards/:id/decks'

カード更新機能 (AngJS コントローラー内): (成功/エラー メッセージはコンソールに記録されません)。

$scope.updateCard = ( card_id, old_deck, new_deck ) ->
  console.log 'CardCtrl updateCard function'
  card_id = parseInt(card_id)
  old_deck = parseInt(old_deck)
  new_deck = parseInt(new_deck)

  Card.update( id: card_id, deck_id: new_deck ).$then (success, error) ->
    console.log 'Success'
    console.log success

    console.log 'Error'
    console.log error
4

1 に答える 1

0

序章

私は自分の問題を解決しました。Misko Hevery からのこのGithub コメントを参照として使用しました。

PUT リクエストが実行されなかった理由:

どうやら、 では、 angular 実行コンテキストAngular 1.1.xを離れると、Angular の関数の外に出ることになります。私の場合、私は JQuery UI の関数を使用していました。 a が new に配置されるたびに、その更新を反映するようにカードを更新したいと考えていました。$scope.$applysortableCardDeckDeck's

私の理解の範囲では、このため、私はangular execution contextの外にいました。ステートメントをngResource実行せず、Angular のオブジェクトの関数が呼び出されることはありません。PUT$thenpromise

ソリューション:

$scope.$apply関数をアクションにラップするだけCard.updateで、アクションを実行でき、その後、$then関数を実行できるようになりました。さらに明確にするために、以下のコード例を参照してください。

$scope.$apply ->
  Card.update(
    id: 1
    deck_id: 2
    front: "HELLO WORLD!"
  ).$then ((success) ->
    console.log "Success"
    console.log success
  ), (error) ->
    console.log "Error"
    console.log error
于 2013-07-10T00:36:46.983 に答える