Объединение двух коллекций в Backbone.js

У меня проблема с объединением двух коллекций Backbone.js друг с другом...

Я много занимался поиском и нашел статью, очень похожую на эту: Backbone - Merge 2 Collections вместе?

Этот существующий ответ предоставил множество способов сделать это, однако ни один из них не помог мне.

Ниже приведен фрагмент кода класса Backbone.js, в котором возникла проблема. Я попытался прокомментировать это как можно лучше, чтобы объяснить мою проблему дальше.

var THAT=this;

//create dynamic channel collection
this.data.dynamicChannelsCollection = new DynamicChannelsCollection();
this.data.dynamicChannelsModel = new DynamicChannelsModel();

this.data.sortModel = new TVPModel({
  sortField:'date_created',
  sortDirection:'DESC',
  pageItems:10,
  page:0,
  searchString:'',
  searchFields:['text']
});

this.data.dynamicChannelsCollection.sortedFetch(this.data.sortModel);

// merge the dynamic channel collection into the standard channel collection
console.log('dynamicChannelsCollection: ', this.data.dynamicChannelsCollection);
console.log('collectionListCollection: ', THAT.data.collectionListCollection);

// HOW DO I MERGE THE 2 COLLECTIONS ABOVE PROPERLY?
// What I've Tried:

// 0) THAT.data.collectionListCollection.toJSON().concat(this.data.dynamicChannelsCollection.toJSON());
// 1) THAT.data.collectionListCollection.add(this.data.dynamicChannelsCollection.toJSON());
// 2) THAT.data.collectionListCollection.add(this.data.dynamicChannelsCollection.toJSON(), {silent:true});
// 3) THAT.data.collectionListCollection.add(this.data.dynamicChannelsCollection.toJSON());
// 4) THAT.data.collectionListCollection.add(this.data.dynamicChannelsCollection.models);
// 5) THAT.data.collectionListCollection.add(this.data.dynamicChannelsCollection.toJSON(), { silent:true });
// 6) THAT.data.collectionListCollection.add(this.data.dynamicChannelsCollection.models, { silent:true });
// 7) 
    //var mergeCollection = this.data.dynamicChannelsCollection.toJSON().concat(THAT.data.collectionListCollection.toJSON());
    //THAT.data.collectionListCollection = new Backbone.Collection(mergeCollection);

// I need THAT.data.collectionListCollection to be a merged array of the two arrays above
console.log('collections merged: ', THAT.data.collectionListCollection);

Есть два console.logs вывести две коллекции, чтобы убедиться, что они существуют. Затем идет третий журнал, который выводит объединенную коллекцию. Следующие два скриншота - это результаты, которые я получал каждый раз... Объединенная коллекция всегда содержала 0 или 4 элемента (если она должна содержать 7).

Как правильно объединить эти две коллекции?

Вот содержимое DynamicChannelCollection из console.log:

child {app: Object, length: 0, models: Array[0], _byId: Object, url: "/api/entity?n=10&o=date_created&od=DESC&entityType=5"}
_byId
:
Object
app
:
Object
length
:
3
models
:
Array[3]
0
:
child
_changing
:
false
_events
:
Object
_pending
:
false
_previousAttributes
:
Object
app
:
Object
attributes
:
Object
changed
:
Object
cid
:
"c77"
collection
:
child
id
:
"66431935"
__proto__
:
constructor
1
:
child
_changing
:
false
_events
:
Object
_pending
:
false
_previousAttributes
:
Object
app
:
Object
attributes
:
Object
changed
:
Object
cid
:
"c78"
collection
:
child
id
:
"66431934"
__proto__
:
constructor
2
:
child
_changing
:
false
_events
:
Object
_pending
:
false
_previousAttributes
:
Object
app
:
Object
attributes
:
Object
changed
:
Object
cid
:
"c79"
collection
:
child
id
:
"66431933"
__proto__
:
constructor
length
:
3
__proto__
:
Array[0]
url
:
"/api/entity?n=10&o=date_created&od=DESC&entityType=5"
__proto__
:
constructor

Вот содержимое CollectionListCollection из console.log:

child {app: Object, length: 0, models: Array[0], _byId: Object}
_byId
:
Object
_events
:
Object
app
:
Object
hasFetched
:
true
length
:
4
models
:
Array[4]
0
:
child
_changing
:
false
_events
:
Object
_pending
:
false
_previousAttributes
:
Object
app
:
Object
attributes
:
Object
changed
:
Object
cid
:
"c80"
collection
:
child
id
:
"66431932"
__proto__
:
constructor
1
:
child
_changing
:
false
_events
:
Object
_pending
:
false
_previousAttributes
:
Object
app
:
Object
attributes
:
Object
changed
:
Object
cid
:
"c81"
collection
:
child
id
:
"66431931"
__proto__
:
constructor
2
:
child
_changing
:
false
_events
:
Object
_pending
:
false
_previousAttributes
:
Object
app
:
Object
attributes
:
Object
changed
:
Object
cid
:
"c82"
collection
:
child
id
:
"66431930"
__proto__
:
constructor
3
:
child
_changing
:
false
_events
:
Object
_pending
:
false
_previousAttributes
:
Object
app
:
Object
attributes
:
Object
changed
:
Object
cid
:
"c83"
collection
:
child
id
:
"66252499"
__proto__
:
constructor
length
:
4
__proto__
:
Array[0]
url
:
"/api/player?n=10&o=date_created&od=DESC"
__proto__
:
constructor

Я добавил текст Collections перед слиянием по запросу. Models в каждом Collection определенно отличаются друг от друга.

0 ответов

Другие вопросы по тегам