Skip to content

Commit bc1319d

Browse files
committed
Better observer.destroy
1 parent 4b0960b commit bc1319d

File tree

1 file changed

+21
-4
lines changed

1 file changed

+21
-4
lines changed

src/core/constructors/observer.js

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,25 +45,42 @@ dop.core.observer.prototype.observe = function(path_id, type) {
4545
}
4646

4747
dop.core.observer.prototype.destroy = function() {
48-
var path_id,
49-
data_path = dop.data.path
50-
51-
delete dop.data.observers[this.id]
48+
var path_id
49+
var data_path = dop.data.path
50+
var path_ids = {}
5251

5352
// Removing observeProperty
5453
for (path_id in this.observers_prop) {
54+
path_ids[path_id] = true
5555
delete data_path[path_id].observers_prop[this.id]
56+
if (isEmptyObject(data_path[path_id].observers_prop))
57+
delete data_path[path_id].observers_prop
5658
}
5759

5860
// Removing observeObject
5961
for (path_id in this.observers) {
62+
path_ids[path_id] = true
6063
delete data_path[path_id].observers[this.id]
64+
if (isEmptyObject(data_path[path_id].observers))
65+
delete data_path[path_id].observers
6166
}
6267

6368
// Removing observeAll
6469
for (path_id in this.observers_all) {
70+
path_ids[path_id] = true
6571
delete data_path[path_id].observers_all[this.id]
72+
if (isEmptyObject(data_path[path_id].observers_all))
73+
delete data_path[path_id].observers_all
6674
}
75+
76+
// Removing path_ids
77+
for (path_id in path_ids) {
78+
if (isEmptyObject(data_path[path_id])) {
79+
delete data_path[path_id]
80+
}
81+
}
82+
83+
delete dop.data.observers[this.id]
6784
}
6885

6986
function observerCheckObject(object, method) {

0 commit comments

Comments
 (0)