-
-
Notifications
You must be signed in to change notification settings - Fork 4.2k
/
Copy pathdependent_keys.js
53 lines (46 loc) · 1.33 KB
/
dependent_keys.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
'no use strict';
// Remove "use strict"; from transpiled module until
// https://bugs.webkit.org/show_bug.cgi?id=138038 is fixed
import {
watch,
unwatch
} from 'ember-metal/watching';
/**
@module ember
@submodule ember-metal
*/
// ..........................................................
// DEPENDENT KEYS
//
export function addDependentKeys(desc, obj, keyName, meta) {
// the descriptor has a list of dependent keys, so
// add all of its dependent keys.
var idx, depKey;
var depKeys = desc._dependentKeys;
if (!depKeys) {
return;
}
for (idx = 0; idx < depKeys.length; idx++) {
depKey = depKeys[idx];
// Increment the number of times depKey depends on keyName.
meta.writeDeps(depKey, keyName, (meta.peekDeps(depKey, keyName)|| 0) + 1);
// Watch the depKey
watch(obj, depKey, meta);
}
}
export function removeDependentKeys(desc, obj, keyName, meta) {
// the descriptor has a list of dependent keys, so
// remove all of its dependent keys.
var depKeys = desc._dependentKeys;
var idx, depKey;
if (!depKeys) {
return;
}
for (idx = 0; idx < depKeys.length; idx++) {
depKey = depKeys[idx];
// Decrement the number of times depKey depends on keyName.
meta.writeDeps(depKey, keyName, (meta.peekDeps(depKey, keyName) || 0) - 1);
// Unwatch the depKey
unwatch(obj, depKey, meta);
}
}