2011-11-04 2 views
31

私はbackbone.jsを使用するために古いアプリケーションを移植しています(うまくいけば) システム内のさまざまなオブジェクトのどれもがidにidを使用していません - それぞれのオブジェクトは異なります。 Backbone.Modelを初期化するとき、私は以下の解決策を思いつきました。バックボーン - idに別のフィールド名を使用

initialize: function(){ 
    this.idAttribute = 'user_ID'; 
    this.set({'id':this.get('user_ID')}); 
} 

しかし、私がバックボーンで開発するとき、私はこのアプローチが私を噛んでしまうと心配しています。 誰もこれについて何か経験がありますか? ポインタは非常に感謝します。

編集:モデルでisNew()を呼び出しただけで、idが1に設定されていてもtrueになりました。 //////////////////////// ///////////////////////

以下を使用すると、それを整理しているようです。

User = Backbone.Model.extend({ 
idAttribute : 'user_ID' 

})

答えて

50

あなたがidAttributeを使用する場合、バックボーンは、基本的にuser_IDプロパティと同期してidプロパティを保持します。おかげで - あなたはこれを感謝し、あなたのクラス

var UserModel = Backbone.Model.extend({ 
    idAttribute: 'user_ID', 
    initialize: function() { 
     //do stuff 
    } 
}); 

var me = new UserModel({user_ID: 1234, name: 'Tim'}); 
console.log(me.id); //1234 
console.log(me.get('user_ID')); //1234 
console.log(me.isNew()); //false 

var me2 = new UserModel({name: 'newUser'}); 
console.log(me2.isNew()); //true 

グッドラック

+0

を定義するとき、それは通常使われている方法です。 – Chin

+2

バックボーンプロジェクトのリレーショナルデータベーススキーマで "id"の代わりに "id_user"のようなid-suffixesを使用する必要がありますか?私はそれが[this](http://stackoverflow.com/a/1369773/2236166)に従ってそれらを使うほうが良いと確信しました、そして、私は "Doh、しかし、バックボーンモデルのidフィールド..."と思いました。このQ&Aを読んでください。ありがとう! –

+1

少し分かりますが、元のid値が必要な場合は、.get( 'id')を使用しないでください。常に 'model.id'を使用してください。 – backdesk

関連する問題