2011-11-04 37 views
31

Tôi đang chuyển một ứng dụng cũ để sử dụng backbone.js (hy vọng) Vấn đề là không có đối tượng nào trong hệ thống sử dụng 'id' cho id - mỗi đối tượng khác nhau . Đọc xung quanh, tôi đã đưa ra giải pháp dưới đây khi khởi tạo Backbone.Model.Xương sống - sử dụng tên trường khác cho id

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

Tôi lo lắng rằng khi tôi phát triển với xương sống, phương pháp này sẽ khiến tôi khó chịu. Có ai có kinh nghiệm với điều này không. Bất kỳ con trỏ nào được đánh giá cao.

chỉnh sửa: Tôi vừa gọi isNew() trên mô hình và nhận được sự thật, mặc dù id hiện được đặt thành 1. //////////////////// ///////////////////////

Sử dụng phần sau có vẻ như sắp xếp.

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

})

Trả lời

50

Khi bạn sử dụng idAttribute, xương sống về cơ bản giữ id sở hữu đồng bộ với user_ID tài sản. Cách nó thường được sử dụng là khi bạn xác định lớp học của bạn

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 

Good Luck

+0

đánh giá cao này - nhờ. – Chin

+2

Chỉ cần vấp khi điều này khi tôi hỏi bản thân mình câu hỏi Nếu nên sử dụng id hậu tố như "id_user" thay vì "id" trong lược đồ cơ sở dữ liệu quan hệ của tôi cho một dự án xương sống. Tôi đã thuyết phục rằng nó tốt hơn để sử dụng chúng theo [this] (http://stackoverflow.com/a/1369773/2236166), sau đó tôi nghĩ "Doh, nhưng các lĩnh vực id cho các mô hình xương sống ...", cho đến khi tôi đọc phần Hỏi & đáp này. Cảm ơn! –

+1

Một chút hiển nhiên nhưng không sử dụng .get ('id') trừ khi bạn muốn giá trị id ban đầu (nếu bạn có). Luôn sử dụng 'model.id'. – backdesk

Các vấn đề liên quan