Переглянути джерело

Merge pull request #3448 from bgaleotti/autocomplete-config

Autocomplete options
Andrej Hudec 9 роки тому
батько
коміт
4728a07266

+ 4 - 0
Form/Type/ModelAutocompleteType.php

@@ -73,6 +73,8 @@ class ModelAutocompleteType extends AbstractType
         $view->vars['req_param_name_search'] = $options['req_param_name_search'];
         $view->vars['req_param_name_search'] = $options['req_param_name_search'];
         $view->vars['req_param_name_page_number'] = $options['req_param_name_page_number'];
         $view->vars['req_param_name_page_number'] = $options['req_param_name_page_number'];
         $view->vars['req_param_name_items_per_page'] = $options['req_param_name_items_per_page'];
         $view->vars['req_param_name_items_per_page'] = $options['req_param_name_items_per_page'];
+        $view->vars['quiet_millis'] = $options['quiet_millis'];
+        $view->vars['cache'] = $options['cache'];
 
 
         // CSS classes
         // CSS classes
         $view->vars['container_css_class'] = $options['container_css_class'];
         $view->vars['container_css_class'] = $options['container_css_class'];
@@ -120,6 +122,8 @@ class ModelAutocompleteType extends AbstractType
             'placeholder'                   => '',
             'placeholder'                   => '',
             'minimum_input_length'          => 3, //minimum 3 chars should be typed to load ajax data
             'minimum_input_length'          => 3, //minimum 3 chars should be typed to load ajax data
             'items_per_page'                => 10, //number of items per page
             'items_per_page'                => 10, //number of items per page
+            'quiet_millis'                  => 100,
+            'cache'                         => false,
 
 
             'to_string_callback'            => null,
             'to_string_callback'            => null,
 
 

+ 6 - 0
Resources/doc/reference/form_types.rst

@@ -252,6 +252,12 @@ minimum_input_length
 items_per_page
 items_per_page
   defaults to 10. Number of items per one ajax request.
   defaults to 10. Number of items per one ajax request.
 
 
+quiet_millis
+  defaults to 100. Number of milliseconds to wait for the user to stop typing before issuing the ajax request.
+
+cache
+  defaults to false. Set to true, if the requested pages should be cached by the browser.
+
 url
 url
   defaults to "". Target external remote URL for ajax requests.
   defaults to "". Target external remote URL for ajax requests.
   You usually should not need to set this manually.
   You usually should not need to set this manually.

+ 2 - 1
Resources/views/Form/Type/sonata_type_model_autocomplete.html.twig

@@ -44,7 +44,8 @@ file that was distributed with this source code.
                 ajax: {
                 ajax: {
                     url:  '{{ url ?: path(route.name, route.parameters|default([]))|e('js') }}',
                     url:  '{{ url ?: path(route.name, route.parameters|default([]))|e('js') }}',
                     dataType: 'json',
                     dataType: 'json',
-                    quietMillis: 100,
+                    quietMillis: {{ quiet_millis }},
+                    cache: {{ cache ? 'true' : 'false' }},
                     data: function (term, page) { // page is the one-based page number tracked by Select2
                     data: function (term, page) { // page is the one-based page number tracked by Select2
                         {% block sonata_type_model_autocomplete_ajax_request_parameters %}
                         {% block sonata_type_model_autocomplete_ajax_request_parameters %}
                         return {
                         return {

+ 2 - 0
Tests/Form/Type/ModelAutocompleteTypeTest.php

@@ -42,6 +42,8 @@ class ModelAutocompleteTypeTest extends TypeTestCase
         $this->assertSame('', $options['placeholder']);
         $this->assertSame('', $options['placeholder']);
         $this->assertSame(3, $options['minimum_input_length']);
         $this->assertSame(3, $options['minimum_input_length']);
         $this->assertSame(10, $options['items_per_page']);
         $this->assertSame(10, $options['items_per_page']);
+        $this->assertSame(100, $options['quiet_millis']);
+        $this->assertSame(false, $options['cache']);
         $this->assertSame('', $options['width']);
         $this->assertSame('', $options['width']);
         $this->assertFalse($options['dropdown_auto_width']);
         $this->assertFalse($options['dropdown_auto_width']);