Browse Source

Merge pull request #291 from larvacloud/master

tags 支持ajax加载
Jiang Qinghua 4 years ago
parent
commit
2f05060390
1 changed files with 55 additions and 0 deletions
  1. 55 0
      src/Form/Field/Tags.php

+ 55 - 0
src/Form/Field/Tags.php

@@ -34,6 +34,11 @@ class Tags extends Field
      */
     protected $key = null;
 
+    /**
+     * @var string
+     */
+    protected $ajaxScript = null;
+
     /**
      * {@inheritdoc}
      */
@@ -157,6 +162,55 @@ class Tags extends Field
         return $this;
     }
 
+    /**
+     * Load options from ajax results.
+     *
+     * @param string $url
+     * @param $idField
+     * @param $textField
+     *
+     * @return $this
+     */
+    public function ajax(string $url, string $idField = 'id', string $textField = 'name')
+    {
+        $url = admin_url($url);
+
+        $this->ajaxScript = <<<JS
+
+  ajax: {
+    url: "$url",
+    dataType: 'json',
+    delay: 250,
+    cache: true,
+    data: function (params) {
+      return {
+        q: params.term,
+        page: params.page
+      };
+    },
+    processResults: function (data, params) {
+      params.page = params.page || 1;
+
+      return {
+        results: $.map(data.data, function (d) {
+                   d.id = d.$idField;
+                   d.text = d.$textField;
+                   return d;
+                }),
+        pagination: {
+          more: data.next_page_url
+        }
+      };
+    },
+  },
+  escapeMarkup: function (markup) {
+      return markup;
+  },
+JS;
+
+        return $this;
+    }
+
     /**
      * {@inheritdoc}
      */
@@ -192,6 +246,7 @@ class Tags extends Field
 $("{$this->getElementClassSelector()}").select2({
     tags: true,
     tokenSeparators: [',', ';', ',', ';', ' '],
+    {$this->ajaxScript}
     createTag: function(params) {
         if (/[,;,; ]/.test(params.term)) {
             var str = params.term.trim().replace(/[,;,;]*$/, '');