11

Tôi mới làm quen với quan hệ Backbone, tôi không chắc cách nào là đúng cách để sử dụng HasMany.Thực hành tốt nhất về xương sống-quan hệ

Tôi có một mô hình Parent có nhiều children (bởi "nhiều" tôi có nghĩa là hàng ngàn trẻ em). Để tránh vấn đề về hiệu suất, tôi truy vấn trẻ em bằng khóa ngoại của chúng: /child/?parent=1, thay vì tạo một danh sách lớn gồm child_ids trong Parent. Nhưng dường như đây không phải là cách làm việc của Backbone-relational.

Vì vậy, tôi tự hỏi điều gì là đúng cách để xử lý việc này.

1, Thay đổi api json tôi để bao gồm danh sách các id con ở phụ huynh, sau đó gửi hàng ngàn id như Backbone quan hệ giới thiệu:

url = function(models) { 
    return '/child/' + (models ? 'set/' + _.pluck(models, 'id').join(';') + '/' : ''); 
} 
// this will end up with a really long url: /child/set/1;2;3;4;...;9998;9999 

2, ghi đè lên nhiều phương pháp trong Backbone-quan hệ, để cho nó xử lý tình huống này. Suy nghĩ đầu tiên của tôi là:

relations: [{ 
    collectionOptions: function(model){ 
    // I am not sure if I should use `this` to access my relation object 
    var relation = this; 
    return { 
     model: relation.relatedModel, 
     url: function(){ 
     return relation.relatedModel.urlRoot + '?' + relation.collectionKey + '=' + model.id; 
     } 
    } 
    } 
}] 
// This seems work, but it can not be inherent by other model 
// And in this case parent will have am empty children list at beginning.  
// So parent.fetchRelated() won't fetch anything, I need call this url my self. 

3, Chỉ sử dụng Backbone-relational as a Store, sau đó sử dụng Bộ sưu tập để quản lý quan hệ.

4, Một số cách thức ma thuật hoặc khuôn mẫu hoặc khung xương sống khác

Cảm ơn bạn đã trợ giúp.

+1

Trong kinh nghiệm của tôi với quan hệ xương sống, tôi không nghĩ rằng nó sẽ hoạt động tốt với hàng ngàn mô hình. Tôi đã có một số vấn đề hiệu suất đáng kể với hàng trăm mô hình - đặc biệt khi tải chúng. Backbone-relational khá "trò chuyện" với các sự kiện bắn và tùy thuộc vào số lượng thuộc tính bạn có trong mô hình của mình, kết quả là hàng chục sự kiện được kích hoạt trên mỗi mô hình nghìn lần các mô hình. –

+0

Tôi tò mò làm thế nào bạn cuối cùng đã xử lý này. –

+0

đây là cách tôi cuối cùng sử dụng, không phải là rất sạch sẽ, nhưng hoạt động cho đến nay. – xzhang

Trả lời

1

Đây là giải pháp tôi đang thực hiện trong dự án hiện tại của mình. Lưu ý rằng Project có nhiều nhận xét, sự kiện, tệp và video. Các mối quan hệ và quan hệ ngược lại của chúng được xác định trên các mô hình đó:

Entities.Project = Backbone.RelationalModel.extend({ 
    updateRelation: function(relation) { 
     var id = this.get('id'), 
      collection = this.get(relation); 

     return collection.fetch({ data: $.param({ project_id: id }) }); 
    } 
}); 

Tôi có điểm cuối REST được định cấu hình để lấy các tham số hoạt động như mệnh đề "WHERE" liên tiếp. Vì vậy, project.updateRelation('comments') sẽ gửi yêu cầu đến /comments?project_id=4 Tôi có thêm một số logic ở phía máy chủ để lọc ra nội dung mà người dùng không có quyền xem. (Laravel back-end, btw)

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