У меня есть этот раздел Javascript для коллекции форм в Symfony2.Symfony2, Typeahead, коллекция форм
$(document).ready(function() {
// Create Input Text
$(document).on('click', '.btn-add[data-target]', function(event) {
event && event.preventDefault();
var collectionHolder = $('#' + $(this).attr('data-target'));
if (!collectionHolder.attr('data-counter')) {
collectionHolder.attr('data-counter', collectionHolder.children().length);
}
var prototype = collectionHolder.attr('data-prototype');
var form = prototype.replace(/__name__/g, collectionHolder.attr('data-counter'));
collectionHolder.attr('data-counter', Number(collectionHolder.attr('data-counter')) + 1);
collectionHolder.append(form);
typeInitialize();
return false;
});
// Remove Input Text
$(document).on('click', '.btn-remove[data-related]', function(event) {
event && event.preventDefault();
var name = $(this).attr('data-related');
($('*[data-content="'+ name +'"]')).remove();
});
// Initialize Typeahead
function typeInitialize() {
// Create typeahead instance
var url = Routing.generate('ajax_search', {name: 'WILDCARD'});
// Trigger typeahead + bloodhound
var products = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
identify: function(obj) { return obj.u_name; },
prefetch: 'json/result.json',
remote: {
url: url,
wildcard: 'WILDCARD',
}
});
products.initialize();
$('.typeahead').typeahead({
minLength: 3,
highlight: true,
limit: 10,
},
{
name: 'product',
display: 'u_name',
source: products.ttAdapter()
});
}
});
Шаблон Twig:
{% extends '::base.html.twig' %}
{% block body %}
{% macro widget_prototype(widget, remove_text) %}
{% if widget.vars.prototype is defined %}
{% set form = widget.vars.prototype %}
{% set name = widget.vars.prototype.vars.full_name %}
{% else %}
{% set form = widget %}
{% set name = widget.vars.full_name %}
{% endif %}
<div data-content="{{ name }}">
<div class="btn-remove">
<a class="btn-remove" data-related="{{ name }}">{{ remove_text }}</a>
</div>
{{ form_widget(form) }}
</div>
{% endmacro %}
<div class="row">
<div class="col-md-12">
<a class="btn-add" class="clicked" data-target="post_tags">Adauga Produs</a>
{{form_start(form, {'attr': {'class': 'form-horizontal'}})}}
{{form_row(form.name)}}
<div id="post_tags" data-prototype="{{ _self.widget_prototype(form.product, 'Delete Product')|escape }}">
{% for widget in form.product.children %}
{{ _self.widget_prototype(widget, 'Delete Product') }}
{% endfor %}
</div>
{{form_end(form)}}
</div>
</div>
{% endblock %}
код не содержит каких-либо ошибок, тестировала его весь день, но когда я пытаюсь добавить новое поле добавляет его без проблем а второе поле добавляет второе поле, но в первом поле добавляется пустой диапазон от typeahead
, а затем, когда я добавляю третье поле, он добавляет еще один пустой диапазон к первому элементу. В четвертом поле он добавляет к первому второму и третьему входу пустой диапазон для typeahead
. С моей точки зрения проблема заключается в функции typeInitialize
и как я ее называю, но я не мог понять, что я сделал неправильно в этой части, а затем вторая проблема - когда я нажимаю на удаление, удаляются все входы что я добавил.