2011-06-23 3 views
0

開いているBackbone.jsのシングルページアプリケーションやデモのほとんどは、1つまたは2つの異なるリソースを処理しているようで、通常は最初にページを読み込むときに質問のコレクションを埋め込みます。Backbone.jsパターン:複数のリソースを読み込むタイミング

どのようにして、複数の(2つ以上の)異なるリソースにデータをリモートで格納しているのですか?あなたはいつコンテンツを読み込みますか?

レール開発者に馴染みの音べき

current_userオブジェクトが存在し、ProjectTeamTaskInvoiceモデルにhas_many関連を有します。私のクライアントサイドのアプリは、これらのモデルにいくつかの種類のCRUD機能を提供しています。多分、さまざまなビューと対応するルートを持つものなど、接続するための追加のビューかもしれません。 ユーザーは、これらのルートのいずれかに、たとえばリンクを貼り付けるには、/#project/34/invoicesとしましょう。この場合、ID 34のプロジェクトとこのプロジェクトに関連付けられた請求書が読み込まれている必要があります。

1つのアプリ内でこのようなケースが多く簡単に終了する可能性があるため、どのようにこの問題を解決しますか?あなただけの私にはきれいないないようだ、またはあなたが常にあなたが必要なものをロードするために巧妙な方法を持っていない、最初は

current_user: { 
    projects: { 
    invoices: {…}, 
    tasks: {…} 
    tasks: {…} 
    … 
} 

すべてロードされていますか?

乾杯!

答えて

0

私は自分自身がこれを処理するための方法を見つけた - 多分それは他の誰かに役立ちます:

私は方法isStaleを実装base collectionクラスを拡張しています。あなたが答えると私は単純化することを意味するものではありませんが、あなたがしているため

if (this.collection.isStale()) { 
    this.collection.fetch(); 
} 
0

私はあなたがここで見ることができますバックボーンプロジェクトに取り組んでいます:http://sourceforge.net/projects/myelin/が、より具体的に、多分このモデル:http://myelin.git.sourceforge.net/git/gitweb.cgi?p=myelin/myelin;a=blob;f=public/javascripts/models/tab.js;h=6b4cb6ad26d2fc12a817ec027b60b2b5ef13f463;hb=HEAD

(警告のカップルは:これは、ほとんどすべてのを使用して私の最初のプロジェクトですあなたが何かを気付いたら、私はそれを修正しようとすることができるようにメモを送ってください!私はバックボーンコントローラを使用せず、自分自身をロールアップしました。しかし、私はあなたのケースでは、デフォルトのコントローラはあなたが探しているものと正確に思っています)。

Backbone.jsは物事を扱うアプローチが非常に残念です。レールの世界と同じようにアプローチすれば、固い解決策としてもっと明らかになるかもしれません。

は例えば、それは/コントローラをルーティングだん方法バックボーンを見てみましょう:http://documentcloud.github.com/backbone/#Controller-routes

は、それはあなたがリスナーに設定できるイベントへのルートをマップします。したがって、上の例のルートでは、イベントを発生させて、プロジェクトコントローラがそれをキャッチして何かを実行させることができます。

例をRailsで実装していた場合、請求書コントローラが呼び出され、モデルを介してデータを取得し、そのデータをビューに送信してレンダリングさせます。バックボーンと同じアイデアです(レールの世界よりもコードに関連していますが)。

私のアプリでは、何が起こっているのですか。ユーザーはUIで何かを行い、イベントをトリガーします。このイベントはキャッチされ、コントローラーに送信されます。コントローラーには、 'get'、 'index'、 'create'、 'destroy'などのような、レールの名前に非常に似たメソッドがあります。モデルが完了したら、ビューを呼び出してレンダリングしますそれは何をする必要があります。

上記の例(tab.js)では、Tabがインスタンス化されると、TabContents Collectionは作成されますが空です。レールに似ています(私は思う)。あなたがそれを聞かない限り、Railsはキット全体をロードしません。

希望に役立ちます!

+0

ありがとう:この私がフェッチまたはこれが一定時間行われていない場合は、コレクションのためのデータを「リフレッシュ」することができますよう 基本的にすべてのコントローラーアクションでデータをロードしていますか?基本的には – polarblau

+0

ですが、UIでデータを更新/変更することができるため、モデルをそのまま使用しています。私は正直にこれが正しいことだとは思わない。私がやっていることは、物事が変わると状態を記録することです。例:インターフェイスの[タブを追加]ボタンをクリックすると、tab_controller createメソッドが呼び出され、新しいTab Modelインスタンスが作成され、サーバーと同期されます。成功すると、新しいタブビューがレンダリングされます。 –

+0

破壊すると、コントローラの破壊メソッドが呼び出され、ローカルモデルを取得し、それをサーバと同期させます(サーバ上でそれを破壊します)。それが成功すれば、ビュー自体も破壊されるように呼び出されます。私は、Railsが物事を単純かつ簡潔に保つために行っていることに近い流れを保つようにしました。 –

1

1つの方法は、ほとんどの高水準タスクを実行するために起動時に十分な負荷をかけることです。その後、下位レベルのタスクは詳細レベルのリソースを取得するためにフェッチを実行する必要があります。

旅行管理アプリケーションでは、ユーザーのセッションを確立し、ユーザーとそのユーザーが持つすべての予約を取得することができます。これにより、追加のサーバー呼び出しを行うことなく予約要約をすばやく表示することができます。

詳細な予約データの要求には、より低いレベルの呼び出しが必要な場合があります。たとえば、私がフライト予約をしている場合、私は定期的にフライト状況情報を要求することがあります。

キーとなる質問は、キャッシュ戦略を中心としていると思います。あなたは、リフレッシュすることなく、あなたのアプリ内でのデータの存続期間を評価する必要があります。あなたのリソースがすぐに古くなったら、必要なときにフェッチする必要があります。

関連する問題