2011-07-06 12 views
2

モデルのIDがバックボーンの場合は、ちょうどidとすべてが小文字になります。サーバーのIDがUserIdの場合はどうなりますか?バックボーンの解析メソッドでは、UserIdidに変更する方法と、他のすべてのプロパティに同じ名前を使用する方法はありますか?backbone.js 1要素(ID)を解析する

たとえば、

window.User = Backbone.Model.extend({ 
    defaults: 
     { 
      UserId: 0, // <--can i just tell backbone that this is my id? 
      Name: '', 
      Age: 0 
     } 
    parse: function(response){ 
      var model = response; 
      model.id = response.UserId; 
      return model; 
     } 
}); 

これを行うより良い方法はありますか?

私のIDがタイプUserIdであることをバックボーンモデルに伝えるのはどうでしょうか。

答えて

2

はそうのようにそれを実行します。

parse: function(response) { 
    var attrs = {}; 
    attrs.id = response.UserId; 
    return attrs; 
} 

解析は、属性のハッシュを返すために責任はなく、モデルを持っています。そのため、レスポンスを属性ハッシュとモデルの両方に変換する必要があります。

+0

を私はコレクションで同じことを行うだろうか?どうやらfetch()を使うと、Model.parseメソッドに軽減されません –

+0

コレクションには解析メソッドもあります。その責任はコレクションに設定するモデルを表す一連のハッシュを返すことです。メソッドのドキュメントを見てください:http://documentcloud.github.com/backbone/#Collection-parse –

+0

一度、私は解析メソッドを使用しているので、私はこれを他のすべてのプロパティに含める必要がありますか?だから例えば。 'attrs.FirstName = response.FirstName;'など –

7

あなたは、あなたのIDがモデルにidAttributeを使用しているものプロパティバックボーンを言っている:

window.User = Backbone.Model.extend({ 
    idAttribute: "UserId", 
    ... 
}) 

とすべてが罰金:)に動作します。バックボーンはidプロパティを作成し、このモデルのコレクションはでUserIdとなります。

0

mauromartiniと同じようにidを設定します。プライベート変数を作成する必要がない他のプロパティを変更するには、サーバーからの応答が単なるオブジェクトであるため、それを操作して返します。

window.User = Backbone.Model.extend({ 
    defaults: { UserId: 0 }, 
    parse: function(response){ 
    response.id = response.UserId; 
    return response; 
    } 
}); 

あなたがきれいにモデルを維持したい場合は、オブジェクトを返す前に、あなたはまた、次のように追加することができます。

delete response.UserId; 
関連する問題