Bläddra i källkod

feature: add shortcuts on $store for new methods

Ryan Chandler 4 år sedan
förälder
incheckning
2387c66cfe
9 ändrade filer med 14 tillägg och 8 borttagningar
  1. 0 0
      dist/spruce.js
  2. 0 0
      dist/spruce.js.map
  3. 0 0
      dist/spruce.module.js
  4. 0 0
      dist/spruce.module.js.map
  5. 0 0
      dist/spruce.umd.js
  6. 0 0
      dist/spruce.umd.js.map
  7. 1 1
      examples/index.html
  8. 10 7
      src/index.js
  9. 3 0
      src/observable.js

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
dist/spruce.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
dist/spruce.js.map


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
dist/spruce.module.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
dist/spruce.module.js.map


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
dist/spruce.umd.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
dist/spruce.umd.js.map


+ 1 - 1
examples/index.html

@@ -45,7 +45,7 @@
 
         <div x-data>
             <input type="checkbox" x-model="$store.toggled.on">
-            <button @click="Spruce.toggle('toggled.on')">Toggle checkbox</button>
+            <button @click="$store.toggle('toggled.on')">Toggle checkbox</button>
         </div>
 
         <script src="../dist/spruce.umd.js"></script>

+ 10 - 7
src/index.js

@@ -26,6 +26,13 @@ const Spruce = {
         this.attach()
 
         this.stores = createObservable(this.stores, {
+            get: (target, key, receiver) => {
+                if (['get', 'set', 'toggle', 'clear'].includes(key)) {
+                    return this[key].bind(this)
+                }
+
+                return Reflect.get(target, key, receiver)
+            },
             set: (target, key, value, receiver) => {
                 if (this.disableReactivity) {
                     return
@@ -152,15 +159,11 @@ const Spruce = {
         this.persistenceDriver.setItem(`__spruce:${name}`, JSON.stringify(this.store(name)))
     },
 
-    get(name) {
-        return name.split('.').reduce((target, part) => target[part], this.stores)
+    get(name, target = this.stores) {
+        return name.split('.').reduce((target, part) => target[part], target)
     },
 
-    set(name, value, target) {
-        if (! target) {
-            target = this.stores
-        }
-
+    set(name, value, target = this.stores) {
         if (! isArray(name)) {
             name = name.split('.')
         }

+ 3 - 0
src/observable.js

@@ -8,6 +8,9 @@ export const createObservable = (target, callbacks) => {
     })
 
     return new Proxy(target, {
+        get(target, key, receiver) {
+            return callbacks.get(target, key, receiver)
+        },
         set(target, key, value, receiver) {
             if (! isNullOrUndefined(value) && isObject(value)) {
                 value = createObservable(value, callbacks)

Vissa filer visades inte eftersom för många filer har ändrats