forked from bergie/VIE
-
Notifications
You must be signed in to change notification settings - Fork 1
/
vie-collectionmanager.js
70 lines (54 loc) · 2.17 KB
/
vie-collectionmanager.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
if (typeof VIE === 'undefined') {
VIE = {};
}
VIE.CollectionManager = {
collections: [],
loadCollections: function() {
jQuery('[typeof="http://purl.org/dc/dcmitype/Collection"]').each(function() {
VIE.CollectionManager.getCollectionForContainer(this);
});
return VIE.CollectionManager.collections;
},
getCollectionForContainer: function(element) {
element = jQuery(element);
var firstChild = element.children(':first-child');
if (firstChild === undefined) {
return null;
}
var preparedNewElement = VIE.ContainerManager.cloneContainer(firstChild);
var Collection = Backbone.Collection.extend({
model: VIE.ContainerManager.getModelForContainer(preparedNewElement)
});
var collectionInstance = new Collection({});
collectionInstance.view = VIE.CollectionManager._getViewForCollection(preparedNewElement, element, collectionInstance);
VIE.CollectionManager.collections.push(collectionInstance);
return collectionInstance;
},
/**
* @private
*/
_getViewForCollection: function(element, collectionElement, collectionInstance) {
var collectionView = Backbone.View.extend({
collection: collectionInstance,
el: collectionElement,
initialize: function() {
_.bindAll(this, 'addItem', 'removeItem');
this.collection.bind('add', this.addItem);
this.collection.bind('remove', this.removeItem);
},
addItem: function(itemInstance) {
itemInstance = VIE.ContainerManager.registerInstance(itemInstance, VIE.ContainerManager.cloneContainer(element));
var itemViewElement = itemInstance.views[0].render().el;
this.el.append(itemViewElement);
itemViewElement.show();
},
removeItem: function(itemInstance) {
if (typeof itemInstance.view === 'undefined') {
return;
}
itemInstance.view.el.hide();
}
});
return new collectionView({});
}
};