php — предотвращает загрузку JavaScript несколько раз, если шаблон ветки включен в цикл foreach родительских шаблонов

Запретить загрузку JavaScript несколько раз, если шаблон ветки включен в цикл foreach родительских шаблонов

У меня проблема с Twig, я включаю шаблон в цикл foreach родительских шаблонов. Дочерний шаблон имеет файл JavaScript, есть событие onclick, которое, по-видимому, запускается несколько раз по причине цикла foreach. Есть способ предотвратить это. Вот фрагмент моего родительского шаблона.

  {% for key, substatusFlow in ticket.flow_locked %} {% set mode = "locked" %} {amp}lt;div class='divBlock2'{amp}gt;{amp}lt;span class='text_summary nobr showhide' data-id='ticket_{{ substatusFlow.flow_item_id }}' title='{{ substatusFlow.sub_status_id|default() }}'{amp}gt;{amp}lt;img src="{{ asset('images/arrow_down_red.gif') }}" data-swap="{{ asset('images/arrow_right_red.gif') }}" data-id="ticket_{{ substatusFlow.flow_item_id }}" title='{{ substatusFlow.sub_status_id|default() }}'{amp}gt; {{ substatusFlow.sub_status_group_name|default()|upper }}{amp}lt;/span{amp}gt; {% set snippet_id = substatusFlow.flow_item_id %} {% set snippet_settings = {unik_id:substatusFlow.flow_item_id, unik_ticket_id: ticket.ticket_id } %} {# CAN BE NUMBER OR TEXT, AS LONG AS IT IS UNIQUE PER PAGE, USEFULL FOR MULTIPLE SEARCH BOXES ON A SINGLE PAGE. *** THE ELEMENT CAN BE REACH USING ID search_client_XXX *** #} {% set snippet_settings = {note: substatusFlow.flow_note|default()}|merge(snippet_settings) %} {% include ('snippet/flow_note/add_flow_note.twig') %} {% endfor% } 

Вот мой фрагмент flow_note с HTML-файлом

 {% block stylesheets %} {amp}lt;link rel="stylesheet" href="{{ asset('css/bootstrap/bootstrap.min.css') }}" type='text/css'{amp}gt; {% endblock %} {% block javascripts %} {amp}lt;script type="text/javascript" src="{{ asset('js/bootstrap/bootstrap.min.js') }}"{amp}gt;{amp}lt;/script{amp}gt; {amp}lt;script type="text/javascript" src="{{ asset('js/snippet/add_flow_note.js?v='~cacheVersion) }}"{amp}gt;{amp}lt;/script{amp}gt; {% endblock %} {% block add_flow_note %} {% if snippet_settings.unik_id is not defined or snippet_settings.unik_ticket_id is not defined %} {amp}lt;span class="text-danger"{amp}gt;CANNOT FIND THE RIGHT PARAMETERS: unik_id {amp}lt;/span{amp}gt; {% else %} {% set employeeName = app.session.get('empfullname')|default() %} {amp}lt;button id="addFlowNote_{{ snippet_settings.unik_id }}" data-snippet-id="{{ snippet_settings.unik_id }}" title="{{ snippet_settings.note|default() }}" style="float:right" class="btn openNoteModal btn-danger" data-toogle="modal" data-target="#flowNoteModal"{amp}gt; {amp}lt;i class="fa fa-comment"{amp}gt;{amp}lt;/i{amp}gt; {amp}lt;/button{amp}gt; {amp}lt;input type="hidden" id="ticketId" value="{{ snippet_settings.unik_ticket_id }}"{amp}gt; {amp}lt;div class="modal flowNoteModal fade" id="flowNoteModal_{{ snippet_settings.unik_id }}" tabindex="-1" role="dialog" aria-labelledby="flowNoteModalLabel" aria-hidden="true" style="top: 20%;"{amp}gt; {amp}lt;div class="modal-dialog" role="document"{amp}gt; {amp}lt;div class="modal-content"{amp}gt; {amp}lt;div class="modal-header"{amp}gt; {amp}lt;h3 class="modal-title" id="exampleModalLabel"{amp}gt;Ajouter un Note{amp}lt;/h3{amp}gt; {amp}lt;button type="button" class="close" data-dismiss="modal" aria-label="Close"{amp}gt; {amp}lt;span aria-hidden="true"{amp}gt;{amp}amp;times;{amp}lt;/span{amp}gt; {amp}lt;/button{amp}gt; {amp}lt;/div{amp}gt; {amp}lt;div class="modal-body"{amp}gt; {amp}lt;div class="form-group"{amp}gt; {amp}lt;label for="flowNoteTextArea"{amp}gt;Note{amp}lt;/label{amp}gt; {amp}lt;textarea class="form-control" id="flowNoteTextArea_{{ snippet_settings.unik_id }}" rows="4"{amp}gt;{{ snippet_settings.note|default() }}{amp}lt;/textarea{amp}gt; {amp}lt;/div{amp}gt; {amp}lt;/div{amp}gt; {amp}lt;div class="modal-footer"{amp}gt; {amp}lt;button type="button" class="btn btn-secondary" data-dismiss="modal"{amp}gt;Cancel{amp}lt;/button{amp}gt; {amp}lt;button type="button" class="btn btn-primary saveNote" id="saveNote_{{ snippet_settings.unik_id }}" data-snippet-id="{{ snippet_settings.unik_id }}"{amp}gt;Sauvegarder{amp}lt;/button{amp}gt; {amp}lt;/div{amp}gt; {amp}lt;/div{amp}gt; {amp}lt;/div{amp}gt; {amp}lt;/div{amp}gt; {amp}lt;div id='divFlowNotes' style='padding-top:10px;' class='text_medium tint_red'{amp}gt; {amp}lt;/div{amp}gt; {% endif %} {% endblock %} 

Вот фрагмент моего файла add_flow_note.js, который запускается несколько раз при нажатии кнопки Сохранить

 $(document).ready(function() { $('.flowNoteModal').on('click', '.saveNote', function (e) { var snippetId = $(this).data('snippet-id'); if ($('#flowNoteTextArea_'   snippetId).val().length {amp}gt;= 255) { displayErrorMsg($('.errMsg'), 'Dépassement de la longueur maximale autorisée'); return; } else { $('#waiticon').show(); $.ajax({ type: 'PUT', url: '/ajax/snippets/add_flow_note/'   snippetId, data: 'flowNotes='   $('#flowNoteTextArea_'   snippetId).val()   '{amp}amp;'   'ticketId='   $('#ticketId').val(), dataType: "json", success: function (msg) { $('#waiticon').hide(); if (msg.type == 'SUCCESS') { displaySuccessMsg($('.successMsg'), msg.content.msg, 800, 15000); $('#flowNoteModal_'   snippetId).modal('hide'); } else if (msg.type == 'FAIL') { displayErrorMsg($('.errMsg'), msg.content.msg, 800, 15000); return; } }, error: function (data, status) { if (status === 'timeout') { alert('Service unavailable, please try again later!'); } }, timeout: 60000 }); } }); } 

Мне нужно, чтобы JS был включен во фрагмент, так как я планирую использовать это в другом месте в проекте

Понравилась статья? Поделиться с друзьями:
JavaScript & TypeScript
Adblock
detector