Czy istnieje sposób na łatwe klonowanie kolekcji kręgosłupa? Zastanawiam się, dlaczego nie ma metody kompilacji, jak w przypadku modeli. Mój problem polega na tym, że mam model trzymający kolekcję dziecięcych. Kiedy sklonuję model. Wciąż mam kolekcję dzieci, ale tylko z ich wartościami domyślnymi.Jak sklonować kolekcję kręgosłupa
Odpowiedz
Jaki jest twój przypadek użycia, aby sklonować kolekcję?
Nie ma wbudowanej funkcji klonowania dla kolekcji, ponieważ nie chcesz klonować modeli w kolekcji. Klonowanie modelu spowodowałoby, że istnieją dwa oddzielne wystąpienia tego samego modelu, a jeśli zaktualizujesz jeden model, drugi nie zostanie zaktualizowany.
Jeśli chcesz utworzyć nową kolekcję w oparciu o określone kryteria, możesz użyć metody filtru kolekcji.
var freshmenModels = studentsCollection.filter(function(student) {
return student.get('Year') === 'Freshman';
}
var freshmenCollection = new Backbone.Collection(freshmenModels);
iść do przodu i sklonować modeli w kolekcji, można napisać następujący kod
var clonedCollection = new Backbone.Collection();
studentsCollection.each(function(studentModel) {
clonedCollection.add(new Backbone.Model(studentModel.toJSON()));
});
Inną opcją, jeśli potrzebne są następujące (czego szukałem, kiedy znalazłem to pytanie;)):
- kopia kolekcji powinny być tego samego typu co w oryginalnej kolekcji (np utworzeniu własnego typu kolekcji, która rozciąga Backbone.Collection)
- Kopia kolekcji powinny być utworzone z tych samych opcji jak oryginalne
- Modele w kopii zbiorów powinny być tworzone przy użyciu metody model.clone()
Kod:
var models = original.map(function (model) { return model.clone(); });
var options = _.clone(original.options);
var copy = new original.constructor(models, options);
Ogólna metoda klonowania w grze Backbone.Collection byłaby niezręczna, ponieważ zawsze będą występować subtelności wokół tego, czy modele i ich zagnieżdżone obiekty będą kopiowane przez odniesienie, czy też same zostaną sklonowane. Wymagania będą bardzo różne w zależności od scenariusza, więc pozostało ci napisanie tego, czego potrzebujesz.
Najprostszy sposób:
var cloned = new Backbone.Collection(original.toJSON());
gdzie original
jest kolekcja sklonować.
Zawsze można wtedy rozszerzyć moduł Backbone o numer Collection
, aby dodać obsługę klonowania w lub bez obsługi dziedziczenia w/o.
To jest świetna odpowiedź, ponieważ wykona głęboki klon, co oznacza, że będzie klonować również modele. Jeśli wolisz płytki klon, w którym nowa kolekcja wskaże te same egzemplarze modelu, skorzystaj z poniższej odpowiedzi Craiga Mylesa. – Dre
Nie przydatne, gdy modele mają metody – OlehZiniak
Użyj metody Backbone Collection clone():
var clonedCollection = myCollection.clone();
Klonuje link kolekcji, więc zmiany w myCollection będą następowały zmiany w clonedCollection –
- 1. Szkielet - Jak wyciąć kolekcję?
- 2. Jak sklonować repozytorium bitbucket?
- 3. Jak sklonować ImageData?
- 4. Jak sklonować generator ES6?
- 5. Jak sklonować Joda DateTime?
- 6. Niestandardowe zdarzenia kręgosłupa
- 7. Kolekcja kręgosłupa z wieloma modelami?
- 8. Sklonuj kolekcję w MongoDB
- 9. Jak umiędzynarodowić kierownicę + widok kręgosłupa?
- 10. sortuj kolekcję szkieletową na podstawie atrybutów modelu
- 11. Newbie kręgosłupa: Jak zdobyć pierwszy model z kolekcji?
- 12. Jak sklonować obiekt generatora Pythona?
- 13. Jak mogę sklonować wiki GitHub?
- 14. Jak sklonować tablicę JavaScript obiektów?
- 15. Jak sklonować użytkownika w Oracle
- 16. jak sklonować obiekt w Androidzie?
- 17. Czy można zainicjować kolekcję kręgosłupa za pomocą identyfikatorów obiektów, a nie obiektów?
- 18. Jak nazwać kolekcję flag?
- 19. Łapanie błędów synchronizacji kręgosłupa
- 20. Weryfikacja kręgosłupa nie działa
- 21. Jak przekształcić kolekcję Scala opcji [X] na kolekcję X
- 22. Jak znaleźć błąd generowany przez pobranie kręgosłupa
- 23. Skróć kolekcję
- 24. Jak skopiować kolekcję do zaobserwowania
- 25. Jak sortować kolekcję w Magento?
- 26. Jak buforować kolekcję w Magento?
- 27. Scala: jak połączyć kolekcję map
- 28. Jak ustawić kolekcję w linii?
- 29. Jak upuścić kolekcję w MongoDB?
- 30. Jak sklonować tablicę wielowymiarową w języku Java?
Ale chcę skopiować wszystkie pojedyncze modele w kolekcji. –
Co próbujesz zrobić, aby skopiować/sklonować wszystkie modele z kolekcji? – Paul
Mam kilka produktów, które mogą mieć listę produktów podrzędnych. Więc kiedy niektórzy wkładają je do koszyka, muszę skopiować wszystkie produkty podrzędne. Użytkownik może zmienić liczbę samych produktów i produktów podrzędnych. Potrzebuję kopii oryginału w koszu. –