2012-09-12 33 views

Trả lời

48

Lựa chọn 1

Nếu bạn chưa lấy bộ sưu tập nào, bạn có thể lấy một trong những đầu tiên, sau đó lấy một giây với {thêm: true} cờ và điều thứ hai sẽ được sáp nhập vào đầu tiên:

collection.fetch({data : {page : 2}); 
=> [{id: 1, article : "..."}, {id: 2, article : "..."}]; 
collection.fetch({data : {page : 2}, add : true }); 
=> [{id: 1, article : "..."}, {id: 2, article : "..."}, {id: 3, article : "..."}]; 

Lựa chọn 2

Nếu you'v e đã lấy các bộ sưu tập và họ đã được lưu trữ trong hai biến, bạn chỉ có thể thêm tất cả các nội dung của bộ sưu tập thứ hai vào cái đầu tiên:

collection1.add(collection2.toJSON()); 

tùy chọn này bị từ thực tế là bộ sưu tập đầu tiên sẽ cháy "thêm "sự kiện khi bộ sưu tập thứ hai được thêm vào nó. Nếu đây có tác dụng phụ như giao diện người dùng không mong muốn mà lại làm cho do sự kiện này, bạn có thể thu hồi nó bằng cách thêm {im lặng: true} cờ

collection1.add(collection2.toJSON(), {silent : true}); 

Lựa chọn 3

Nếu bạn chỉ cần định dạng JSON của các bộ sưu tập này, tức làcho các mục đích mẫu vẽ HTML, bạn chỉ có thể làm giảm tất cả mọi thứ để literals JS (mảng, đối tượng):

collection1.toJSON().concat(collection2.toJSON()); 
=> [{id: 1, article : "..."}, {id: 2, article : "..."}, ...]; 

Lựa chọn 4 = Lựa chọn 2 + 3

Nếu bạn đã lấy cả bộ sưu tập, bạn có thể giảm tới literals JS và thêm tất cả mọi thứ để một bộ sưu tập Backbone tươi

var rawCollection = collection1.toJSON().concat(collection2.toJSON()); 
var newCollection = new Backbone.Collection(rawCollection); 
+1

Cảm ơn bạn đã giải thích kỹ lưỡng =) – Kay

+12

-1. Nếu bạn gọi toJSON() bạn mất tham chiếu đến các mô hình. Nếu bạn tạo một mô hình, chèn nó vào một bộ sưu tập, hợp nhất bộ sưu tập với một bộ sưu tập khác, thay đổi mô hình, mô hình trong bộ sưu tập cuối cùng không được cập nhật. Điều này sẽ trở thành một cơn ác mộng để gỡ lỗi. Nó sẽ là ok nếu bạn muốn sao chép các mô hình và giữ chúng tách ra, nhưng nó không phải là tiêu chuẩn và nên được chỉ ra. –

+9

Nếu bạn đã có hai bộ sưu tập, có lẽ bạn nên sử dụng bất kỳ câu trả lời nào dưới đây sử dụng: 'collection1.add (collection2.models);' –

0

Dường như với tôi rằng bằng cách thực hiện điều này, bạn mất ngữ nghĩa được gắn với /api/page/{1, 2}/. Nó cũng có vẻ với tôi rằng không phải xương sống, không gạch dưới, cung cấp cho bạn một chức năng/phương pháp làm chính xác những gì bạn đang cố gắng làm.

Vì vậy, lựa chọn của bạn:

  • tạo ra một bộ sưu tập mới, thêm mỗi mục từ các bộ sưu tập trước đó của bạn;
  • thêm các mục bộ sưu tập đầu tiên vào mục thứ hai

Nhưng có thể bạn đã biết điều này.

+0

Có. Tôi nghĩ rằng giải pháp ở đây là có 1 bộ sưu tập và bạn 'fetch ({data: {page: 1}, add: true})'. Tăng giá trị trang với mỗi 'fetch()' và thêm lô/trang mô hình mới nhất vào bộ sưu tập. – jmk2142

+0

Giải pháp của bạn có vẻ khá đẹp, tuy nhiên tôi nghĩ rằng anh ấy đã có các bộ sưu tập được tìm nạp và có thể muốn tránh tìm nạp lại dữ liệu. Nhưng nếu nó là lưu ý trường hợp, sau đó theo cách của bạn là một cách tốt. – ksol

5
collection.add(models, [options]) 

Bộ sưu tập là mảng của các mô hình

collection.models 

lợi nhuận mảng của các mô hình

Thêm một mô hình (hoặc một mảng của các mô hình) để bộ sưu tập.

A = Backbone.Collection; 
collection1 = new A([ 
    {key, 'value'},     //model1 
    {key : value1}     //model2 in collection1 
]); 

B = Backbone.Collection; 
collection2 = new B([ 
    {key1, 'value'},     //model1 
    {key1 : value1}     //model2 in collection2 
]); 


collection1.add(collection2.models); //now, collection1 has four models.. 
0

Collection.models cung cấp truy cập trực tiếp đến các mảng của moels và Collection.add sẽ mất một mảng của các mô hình như một cuộc tranh cãi.

5

sử dụng

collection.models 

insted của

collection.toJSON() 
41

thử này, bộ sưu tập là mảng của các mô hình

collection1.add(collection2.models); 

nếu chúng tôi sử dụng

collection1.add(collection2.toJSON()); 

sau đó tham khảo chage

+6

+1 Đó là câu trả lời thực sự duy nhất, thực sự phải là câu trả lời được chấp nhận. Xem tài liệu: http://backbonejs.org/#Collection-add. Bạn cũng có thể quyết định có chấp nhận bản sao hay không bằng cách chuyển: {merge: true} –

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