微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Select2entity 不适用于嵌入表单

如何解决Select2entity 不适用于嵌入表单

我有这个代码

->add('product',Select2EntityType::class,[
            'remote_route'          => 'search','class'                 => Product::class,'primary_key'           => 'id','text_property'         => 'name','minimum_input_length'  => 2,'page_limit'            => 10,'allow_clear'           => true,'delay'                 => 250,'cache'                 => true,'cache_timeout'         => 60000,// if 'cache' is true
            'language'              => 'fr','placeholder'           => 'yep','allow_add'             => [
                'enabled'               => true,'new_tag_text'          => '','tag_separators'        => '[".",","]'
            ],'multiple'             => false,'attr'                 => [
                'style' => 'width:100%'
            ],'scroll'               => true,])

我的html:

{% block main %}
<div class="Box-body">
    <div class="row">
       <div id="dynamic-relations-elements" class="hidden">
    </div>
</div>
{% endblock %}

{% block body_javascript %}
    {{ parent() }}
    <script src="{{ asset('build/js/users.js') }}"></script>
    <script src="{{ asset('bundles/tetranzselect2entity/js/select2entity.js') }}"></script>
{% endblock body_javascript %}

ventilation.js我有

$('#dynamic-relations-elements').removeClass('hidden');
  $.ajax({
     type: "GET",url: Routing.generate('create'),success: function (response) {
        $('#dynamic-relations-elements').html(response);
     }
})

以及构建表单的路径:

/**
 * @Route("/ajax/product-create",name="create",*     options      = { "expose" = true })
 * @param Request $request
 * @return Response
 */
public function createProduct()
{
    $productVen = new Product();

    $form = $this->createForm(ProductType::class,$productVen);

    return $this->render('/users/add-product.html.twig',[
        'form' => $form->createView(),]);
}

问题是选择框没有初始化。我有一个字段 product 一个简单的文本输入而不是一个选择框。我在浏览器控制台中没有错误。请问有什么想法吗?提前谢谢

解决方法

如果您查看 source 行 144 - 148,您将看到元素是如何初始化的:

(function ($) {
    $(document).ready(function () {
        $('.select2entity[data-autostart="true"]').select2entity();
    });
})(jQuery);

在您的情况下,这最初发生在表单存在之前。所以看起来你只需要手动初始化元素。
尝试这样的事情:

$.ajax({
     type: "GET",url: Routing.generate('_route_ventilation_products_create'),success: function (response) {
         let $dre = $('#dynamic-relations-elements');
         $dre.html(response);
         let $s2 = $dre.find('.select2entity');
         $s2.select2entity();
         $s2.on('change',function(){
           // do something with selected value
           console.log(this.id,$(this).find(':selected').val());
         });
     }
})

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。