Explorar o código

Tweak x-data to sometimes run while cloning a tree

Caleb Porzio %!s(int64=2) %!d(string=hai) anos
pai
achega
7043509b3d
Modificáronse 1 ficheiros con 8 adicións e 2 borrados
  1. 8 2
      packages/alpinejs/src/directives/x-data.js

+ 8 - 2
packages/alpinejs/src/directives/x-data.js

@@ -2,7 +2,7 @@ import { directive, prefix } from '../directives'
 import { initInterceptors } from '../interceptor'
 import { injectDataProviders } from '../datas'
 import { addRootSelector } from '../lifecycle'
-import { skipDuringClone } from '../clone'
+import { isCloning } from '../clone'
 import { addScopeToNode } from '../scope'
 import { injectMagics, magic } from '../magics'
 import { reactive } from '../reactivity'
@@ -10,7 +10,13 @@ import { evaluate } from '../evaluator'
 
 addRootSelector(() => `[${prefix('data')}]`)
 
-directive('data', skipDuringClone((el, { expression }, { cleanup }) => {
+directive('data', ((el, { expression }, { cleanup }) => {
+    // If we are cloning a tree, we only want to evaluate x-data if another
+    // x-data context DOESN'T exist on the component.
+    // The reason a data context WOULD exist is that we graft root x-data state over
+    // from the live tree before hydrating the clone tree.
+    if (isCloning && el._x_dataStack) return;
+
     expression = expression === '' ? '{}' : expression
 
     let magicContext = {}