5

私はクライアントサイドのJavascript MVC、最初のember.jsアプリで初心者です。Rails3のネストされたリソースを操作するためにember-restコントローラを使用するにはどうすればよいですか?

ポストコメントタイプのネストされたモデルを作成する際に、ember-restを使用する手順はここに従います。

http://www.cerebris.com/blog/2012/01/26/beginning-ember-js-on-rails-part-2/

私は次のようにネストされたリソースを書き始めた:

App.commentsController = Ember.ResourceController:

resources :conversations do 
    resources :comments 
    end 

を今の問題は、私はエンバー-残りのコントローラを書かなければならなかったときであります.create({ resourceType:App.Comment resourceURL: '/会話/:id/comments' });

私は中間で:idを使用することはできません。どうすればそれを回避できますか? ember-dataはこれを解決しますか?それはspine.jsの統合がやや簡単にこれを処理するようです。前もって感謝します!

答えて

6

私は昨日から私の投稿にあなたのコメントに答えることを意味していたので、ここで質問してうれしいです。

私は、jQuery.ajaxの上に非常に薄いレイヤーとしてember-restを書いたと言って始めます。それはひどく進歩していないし、団体のための組込み施設もない。しかし、私は今、このライブラリがかなり使い易くなっていることを考えています。下のコードからわかるように、このコンセプトは処理できますが、libでより抽象的にする必要があります。

関連付けは、各親リソース内にリソースコントローラのインスタンスを作成することで処理できます。各特定のリソースコントローラは、特定のリソースの配列を管理する必要がありますが、必ずしも特定のタイプのすべてのリソースを管理する必要はありません。

お使いの場合には

、あなたは会話のコメントを管理するためにResourceControllerを拡張することができます:あなたは、各会話にConversationCommentsのインスタンスを設定することができ

App.ConversationComments = Ember.ResourceController.extend({ 
    resourceType: App.Comment, 

    // override _resourceUrl() to base the url on the conversation 
    _resourceUrl: function() { 
     return this.get("conversation")._resourceUrl() + "/comments"; 
    } 
    }); 

App.Conversation = Ember.Resource.extend({ 
    resourceUrl:  '/conversations', 
    resourceName:  'conversation', 
    resourceProperties: ['prop1', 'prop2'] 

    // init comments 
    init: function() { 
     this.set("comments", App.ConversationComments.create({ conversation: this })); 
    } 
    }); 

なく、少なくとも最後に、あなたを会話ごとにコメントを取得する必要があります:

conversation.get("comments").findAll(); 

jsonにすべてのコメントがある場合は、代わりにloadAll()を使用することもできます。 loadAll()またはfindAll()を呼び出す場所と時間は、アプリのニーズによって異なります。明らかに、最高のパフォーマンスを得るためには、ajax呼び出しの回数を減らすことが必要です。

Ember-dataは、ember-restよりもはるかに野心的なプロジェクトであり、すでにトランザクションなどの高度な機能だけでなく、関連付けもサポートしています。これは、変化するAPIを使って非常に積極的な開発の下にあります。あなたが忍耐強く、コードを掘り下げたい場合は、試してみることを強くお勧めします。ほこりが少し落ち着くと、私もブログを書く予定です。

+0

お返事ありがとうございました。私はember-dataを使うためにどれだけの変更が必要かを見極めようとしています。まだ考えています。 –

+0

私はあなたのアプローチを実装し始めました。コメントを呼び出すedit.jsのPUTまたはsubmit関数のようです。saveResource()は、 "/ conversations /:conversation_id/comments /:id"の代わりにjsonを "/ comments"に置き換えても失敗します。 –

+0

私の質問には心配しないで、私は自分自身で "resources:comments"を削除し、routes.rbにネストされたリソースの設定を保存しました。 –

関連する問題