Procházet zdrojové kódy

feature(watchers): return unwatch method from watch

Ryan Chandler před 4 roky
rodič
revize
c43eb708dc

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
dist/spruce.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
dist/spruce.js.map


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
dist/spruce.module.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
dist/spruce.module.js.map


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
dist/spruce.umd.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 0
dist/spruce.umd.js.map


+ 1 - 1
examples/persisted-watchers.html

@@ -13,7 +13,7 @@
                 enabled: false,
             }, true);
 
-            Spruce.watch('test.enabled', function (enabled) {
+            const [unwatch] = Spruce.watch('test.enabled', function (enabled) {
                 console.log(enabled)
             });
         </script>

+ 26 - 1
src/index.js

@@ -197,7 +197,7 @@ const Spruce = {
 
             this.watchers[name].push(callback)
 
-            return
+            return [() => this.unwatch(name, callback)]
         }
 
         const nameParts = name.split('.')
@@ -228,6 +228,31 @@ const Spruce = {
         }
 
         target.__watchers.get(part).add(callback)
+
+        return [() => this.unwatch(name, callback)]
+    },
+
+    unwatch(name, callback) {
+        const nameParts = name.split('.')
+
+        const target = nameParts.reduce((target, part) => {
+            const sub = target[part]
+
+            if (! isNullOrUndefined(sub) && (isObject(sub) || isArray(sub))) {
+                return sub
+            }
+
+            return target
+        }, this.stores)
+
+        const part = Object.is(target, this.get(name)) ? '__self' : nameParts[nameParts.length - 1]
+        const watchers = target.__watchers
+
+        if (! watchers.has(part)) {
+            return
+        }
+
+        watchers.get(part).delete(callback)
     },
 
     runWatchers(target, key, value) {

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů