Giả sử có 2 Bộ sưu tập, đại diện tương ứng /api/page/1
và /api/page/2
; là có anyway (thông qua Underscore, ví dụ) để kết hợp 2 Bộ sưu tập vào một bộ sưu tập mới, duy nhất?Xương sống - Hợp nhất 2 Bộ sưu tập với nhau?
Trả lời
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);
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.
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
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
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..
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.
sử dụng
collection.models
insted của
collection.toJSON()
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
+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} –
- 1. hợp nhất bộ sưu tập xương sống với phản hồi của máy chủ
- 2. phân tích cú pháp lồng nhau json với bộ sưu tập xương sống
- 3. Tạo chế độ xem xương sống cho bộ sưu tập
- 4. Sự kiện đặt lại xương sống trong bộ sưu tập
- 5. Bộ sưu tập xương sống của mô hình đa hình
- 6. Xương sống: Tạo bộ sưu tập từ JSON
- 7. Xóa mục khỏi bộ sưu tập xương sống
- 8. Tìm nạp bộ sưu tập xương sống (thêm: đúng) không cập nhật bộ sưu tập
- 9. Bộ sưu tập xương sống ở đâu với điều kiện OR
- 10. Các sự kiện xương sống khi bắn mô hình trên bộ sưu tập (Bắn đôi)
- 11. phát hiện khi một bộ sưu tập xương sống đã được tìm nạp (Backbone 1.0.0)
- 12. Bộ sưu tập xương sống - Lọc và hiển thị Bộ sưu tập mất tham chiếu đến Bộ sưu tập chưa được lọc ban đầu
- 13. Xương sống - Làm cách nào để cắt một bộ sưu tập?
- 14. Sử dụng dấu gạch dưới Phương pháp 'tìm' trên Bộ sưu tập xương sống
- 15. Sự cố Hiển thị bộ sưu tập xương sống bằng mẫu Mustache
- 16. Kích hoạt xương sống .add khi một bộ sưu tập là .fetched?
- 17. bộ sưu tập xương sống lấy không cháy, thiết lập lại()
- 18. Sắp xếp bộ sưu tập xương sống theo thứ tự abc
- 19. Xương sống - không phân tích từng mô hình trong bộ sưu tập sau khi tìm nạp
- 20. Xương sống: Cách xác thực xem Mô hình đã tồn tại trong Bộ sưu tập chưa?
- 21. Lọc bộ sưu tập xương sống bởi giá trị thuộc tính
- 22. Xương sống - Các bộ sưu tập được lồng trong các Mô hình
- 23. Xương sống - Có thể lấy bộ sưu tập từ một mẫu
- 24. cách thêm json vào xương sống, bộ sưu tập js bằng cách tìm nạp
- 25. Backbone lồng nhau bộ sưu tập
- 26. Thực hành tốt nhất cho việc di chuyển mô hình xương sống trong một bộ sưu tập
- 27. thực hiện chính xác các bộ so sánh xương sống
- 28. xem Switching với xương sống
- 29. Bản giảm trong RavenDb hơn 2 bộ sưu tập với bộ sưu tập con
- 30. Sự kiện tùy chỉnh xương sống
Cảm ơn bạn đã giải thích kỹ lưỡng =) – Kay
-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. –
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);' –