2012-02-11 17 views
3

私は最初のBackbone.jsアプリケーションをRails RESTバックエンドで書いています。困惑しているのはモデル間の関係です。Backbone.jsとのモデル関係をロードする

私が書いているこのアプリのモデルはTicketClientです。私はTicketsClientsコレクションの両方をセットアップしました。

私は数千人の顧客がいて、メモリにロードしたくないのではなく、チケットが参照されているときに遅れて顧客をロードしたいと思います。

Model#fetch()メソッドが非同期であるため、私は明らかにうまくいきません。あなたが想像できるように、コールが行われたときに返さなかったフェッチので

class Deputy.Models.Ticket extends Backbone.Model 

    initialize: -> 
     @fetchClient() 

    fetchClient: -> 
     @client = new Deputy.Models.Client() 
     @client.set id: @get('userid') 
     @client.fetch() 

    clientName: -> 
     first = @client.get('firstname') 
     last = @client.get('lastname') 
     "#{first} #{last}" 

は、clientName()関数は常に、「未定義未定義」を返します。

はここで、これまで(でのCoffeeScript)私のチケットモデルです。

この種のデータ関係を処理する正しい方法は何ですか?あなたが一歩前進して、私が間違ったアプローチを使用していて、代わりに何かを提案していると言えば、私は気にしないでください。

ポインタ、記事、その他何かがあれば幸いです。

答えて

5

client.fetch()は、完了時に発射されるsuccessオプションを受け入れます。 fetchClientを発射するときは、ローディングUIを追加する必要があります(ボタンを回転アイコンで置き換えるだけの簡単な操作です)。クライアントのロードが完了すると、名前の表示が続けられます。応答のための

fetchClient: function() { 
    var client = new Deputy.Models.Client(); 
    client.set({ id: this.get('userid') }); 
    client.fetch({ success: this.fetchClientSuccess }); 
    // Or maybe the following depending on how you set up your code. 
    // client.fetch({ success: Deputy.Models.fetchClientSuccess }); 
}, 

fetchClientSuccess: function(lead, response) { 
    Deputy.Models.clientName(lead); 
} 
+0

ありがとう:

は、JavaScriptでは、あなたはこのような何かをするだろう。しかし、 'Deputy.Models.clientName(lead)'は正確に何をしていますか?それはどこから来ますか? – kolrie

+0

気にしない、私はそれを得た! – kolrie