@@ -35,34 +35,19 @@ export function _differsImmutable(a, b) {
35
35
return a != a ? b == b : a !== b ;
36
36
}
37
37
38
- export function dispatchObservers ( component , group , changed , newState , oldState ) {
39
- for ( var key in group ) {
40
- if ( ! changed [ key ] ) continue ;
41
-
42
- var newValue = newState [ key ] ;
43
- var oldValue = oldState [ key ] ;
44
-
45
- var callbacks = group [ key ] ;
46
- if ( ! callbacks ) continue ;
47
-
48
- for ( var i = 0 ; i < callbacks . length ; i += 1 ) {
49
- var callback = callbacks [ i ] ;
50
- if ( callback . __calling ) continue ;
51
-
52
- callback . __calling = true ;
53
- callback . call ( component , newValue , oldValue ) ;
54
- callback . __calling = false ;
55
- }
56
- }
57
- }
58
-
59
38
export function fire ( eventName , data ) {
60
39
var handlers =
61
40
eventName in this . _handlers && this . _handlers [ eventName ] . slice ( ) ;
62
41
if ( ! handlers ) return ;
63
42
64
43
for ( var i = 0 ; i < handlers . length ; i += 1 ) {
65
- handlers [ i ] . call ( this , data ) ;
44
+ var handler = handlers [ i ] ;
45
+
46
+ if ( ! handler . __calling ) {
47
+ handler . __calling = true ;
48
+ handler . call ( this , data ) ;
49
+ handler . __calling = false ;
50
+ }
66
51
}
67
52
}
68
53
@@ -71,7 +56,6 @@ export function get(key) {
71
56
}
72
57
73
58
export function init ( component , options ) {
74
- component . _observers = { pre : blankObject ( ) , post : blankObject ( ) } ;
75
59
component . _handlers = blankObject ( ) ;
76
60
component . _bind = options . _bind ;
77
61
@@ -81,27 +65,20 @@ export function init(component, options) {
81
65
}
82
66
83
67
export function observe ( key , callback , options ) {
84
- var group = options && options . defer
85
- ? this . _observers . post
86
- : this . _observers . pre ;
87
-
88
- ( group [ key ] || ( group [ key ] = [ ] ) ) . push ( callback ) ;
68
+ var fn = callback . bind ( this ) ;
89
69
90
70
if ( ! options || options . init !== false ) {
91
- callback . __calling = true ;
92
- callback . call ( this , this . _state [ key ] ) ;
93
- callback . __calling = false ;
71
+ fn ( this . get ( ) [ key ] , undefined ) ;
94
72
}
95
73
96
- return {
97
- cancel : function ( ) {
98
- var index = group [ key ] . indexOf ( callback ) ;
99
- if ( ~ index ) group [ key ] . splice ( index , 1 ) ;
100
- }
101
- } ;
74
+ return this . on ( options && options . defer ? 'update' : 'state' , function ( event ) {
75
+ if ( event . changed [ key ] ) fn ( event . current [ key ] , event . previous && event . previous [ key ] ) ;
76
+ } ) ;
102
77
}
103
78
104
79
export function observeDev ( key , callback , options ) {
80
+ console . warn ( "this.observe(key, (newValue, oldValue) => {...}) is deprecated. Use\n\n // runs before DOM updates\n this.on('state', ({ changed, current, previous }) => {...});\n\n // runs after DOM updates\n this.on('update', ...);\n\n...or add the observe method from the svelte-extras package" ) ;
81
+
105
82
var c = ( key = '' + key ) . search ( / [ . [ ] / ) ;
106
83
if ( c > - 1 ) {
107
84
var message =
@@ -169,9 +146,9 @@ export function _set(newState) {
169
146
if ( this . _bind ) this . _bind ( changed , this . _state ) ;
170
147
171
148
if ( this . _fragment ) {
172
- dispatchObservers ( this , this . _observers . pre , changed , this . _state , oldState ) ;
149
+ this . fire ( "state" , { changed : changed , current : this . _state , previous : oldState } ) ;
173
150
this . _fragment . p ( changed , this . _state ) ;
174
- dispatchObservers ( this , this . _observers . post , changed , this . _state , oldState ) ;
151
+ this . fire ( "update" , { changed : changed , current : this . _state , previous : oldState } ) ;
175
152
}
176
153
}
177
154
0 commit comments