Caleb Porzio 3 yıl önce
ebeveyn
işleme
68094c1414
1 değiştirilmiş dosya ile 13 ekleme ve 2 silme
  1. 13 2
      packages/alpinejs/src/scope.js

+ 13 - 2
packages/alpinejs/src/scope.js

@@ -55,6 +55,11 @@ export function mergeProxies(objects) {
             return (objects.find(obj => {
             return (objects.find(obj => {
                 if (obj.hasOwnProperty(name)) {
                 if (obj.hasOwnProperty(name)) {
                     let descriptor = Object.getOwnPropertyDescriptor(obj, name)
                     let descriptor = Object.getOwnPropertyDescriptor(obj, name)
+
+                    // If we already bound this getter, don't rebind.
+                    if ((descriptor.get && descriptor.get._x_alreadyBound) || (descriptor.set && descriptor.set._x_alreadyBound)) {
+                        return true
+                    }
                     
                     
                     // Properly bind getters and setters to this wrapper Proxy.
                     // Properly bind getters and setters to this wrapper Proxy.
                     if ((descriptor.get || descriptor.set) && descriptor.enumerable) {
                     if ((descriptor.get || descriptor.set) && descriptor.enumerable) {
@@ -63,10 +68,16 @@ export function mergeProxies(objects) {
                         let setter = descriptor.set
                         let setter = descriptor.set
                         let property = descriptor
                         let property = descriptor
 
 
+                        getter = getter && getter.bind(thisProxy)
+                        setter = setter && setter.bind(thisProxy)
+
+                        if (getter) getter._x_alreadyBound = true
+                        if (setter) setter._x_alreadyBound = true
+
                         Object.defineProperty(obj, name, {
                         Object.defineProperty(obj, name, {
                             ...property,
                             ...property,
-                            get: getter && getter.bind(thisProxy),
-                            set: setter && setter.bind(thisProxy),
+                            get: getter,
+                            set: setter,
                         })
                         })
                     }
                     }