2011-11-04 20 views
31

我正在移植一个旧的应用程序来使用backbone.js(希望) 问题是系统中的各种对象没有使用'id'为id - 每个对象都是不同的。仔细阅读,我在初始化Backbone.Model时提出了下面的解决方案。骨干 - 使用不同的字段名称为id

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

我很担心,但是随着我与骨干一起发展,这种方法会咬我。 有没有人有这方面的经验。 任何指针非常赞赏。

编辑:我只是在模型上调用isNew()并且变为true,即使id现在设置为1. //////////////////// ///////////////////////

使用以下内容似乎将它整理出来。

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-suffixes,比如“id_user”而不是“id”。我确信根据[this](http://stackoverflow.com/a/1369773/2236166)使用它们会更好,然后我认为“Doh,但是骨干模型的id字段......”,直到我阅读本问答。谢谢! –

+1

有点明显,但不要使用.get('id'),除非你想要原始的id值(如果有的话)。始终使用'model.id'。 – backdesk