Jelajahi Sumber

Expand以及Modal允许在闭包内返回异步加载类的实例

jqh 5 tahun lalu
induk
melakukan
19d2441fdb
2 mengubah file dengan 19 tambahan dan 9 penghapusan
  1. 9 5
      src/Grid/Displayers/Expand.php
  2. 10 4
      src/Grid/Displayers/Modal.php

+ 9 - 5
src/Grid/Displayers/Expand.php

@@ -3,6 +3,7 @@
 namespace Dcat\Admin\Grid\Displayers;
 
 use Dcat\Admin\Admin;
+use Dcat\Admin\Support\Helper;
 use Dcat\Admin\Support\LazyRenderable;
 use Illuminate\Contracts\Support\Renderable;
 use Illuminate\Support\Str;
@@ -32,13 +33,16 @@ class Expand extends AbstractDisplayer
         $remoteUrl = '';
 
         if ($callbackOrButton && $callbackOrButton instanceof \Closure) {
-            $callback = $callbackOrButton->bindTo($this->row);
+            $callbackOrButton = $callbackOrButton->call($this->row, $this);
 
-            $html = $callback($this);
-            if ($html instanceof Renderable) {
-                $html = $html->render();
+            if (! $callbackOrButton instanceof LazyRenderable) {
+                $html = Helper::render($callbackOrButton);
+
+                $callbackOrButton = null;
             }
-        } elseif ($callbackOrButton instanceof LazyRenderable) {
+        }
+
+        if ($callbackOrButton instanceof LazyRenderable) {
             $html = '<div style="min-height: 150px"></div>';
 
             $this->setUpLazyRenderable($callbackOrButton);

+ 10 - 4
src/Grid/Displayers/Modal.php

@@ -66,10 +66,16 @@ JS;
         $id = $this->generateElementId();
 
         if ($callback instanceof \Closure) {
-            $html = Helper::render(
-                $callback->call($this->row, $this)
-            );
-        } elseif (is_string($callback) && is_subclass_of($callback, LazyRenderable::class)) {
+            $callback = $callback->call($this->row, $this);
+
+            if (! $callback instanceof LazyRenderable) {
+                $html = Helper::render($callback);
+
+                $callback = null;
+            }
+        }
+
+        if (is_string($callback) && is_subclass_of($callback, LazyRenderable::class)) {
             $html = '';
 
             $this->setUpLazyRenderable($id, $callback::make());