8000 [Collection forms] Make javascript generic · symfony/symfony-docs@45d8a41 · GitHub
[go: up one dir, main page]

Skip to content

Commit 45d8a41

Browse files
committed
[Collection forms] Make javascript generic
1 parent 52c2ca0 commit 45d8a41

File tree

1 file changed

+18
-18
lines changed

1 file changed

+18
-18
lines changed

form/form_collections.rst

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,13 @@ the following ``data-prototype`` attribute to the existing ``<ul>`` in your temp
242242

243243
.. code-block:: html+twig
244244

245-
<ul class="tags" data-prototype="{{ form_widget(form.tags.vars.prototype)|e('html_attr') }}">
245+
<ul class="tags" data-prototype="{{ form_widget(form.tags.vars.prototype)|e('html_attr') }}"></ul>
246+
247+
Now add a button just next to the ``<ul>`` to dynamically add a new tag
248+
249+
.. code-block:: html+twig
250+
251+
<button type="button" class="add_item_link" data-collection-holder-class="tags">Add a tag</button>
246252

247253
On the rendered page, the result will look something like this:
248254

@@ -285,27 +291,17 @@ will be show next):
285291

286292
.. code-block:: javascript
287293
288-
var $collectionHolder;
289-
290-
// setup an "add a tag" link
291-
var $addTagButton = $('<button type="button" class="add_tag_link">Add a tag</button>');
292-
var $newLinkLi = $('<li></li>').append($addTagButton);
293-
294294
jQuery(document).ready(function() {
295295
// Get the ul that holds the collection of tags
296-
$collectionHolder = $('ul.tags');
297-
298-
// add the "add a tag" anchor and li to the tags ul
299-
$collectionHolder.append($newLinkLi);
300-
301296
// count the current form inputs we have (e.g. 2), use that as the new
302297
// index when inserting a new item (e.g. 2)
303-
$collectionHolder.data('index', $collectionHolder.find('input').length);
298+
$('ul.tags').data('index', $tagsCollectionHolder.find('input').length);
304299
305-
$addTagButton.on('click', function(e) {
300+
$('body').on('click', 'add_item_link', function(e) {
301+
$collectionHolderClass = $(e.currentTarget).data('collectionHolderClass');
306302
// add a new tag form (see next code block)
307-
addTagForm($collectionHolder, $newLinkLi);
308-
});
303+
addFormToCollection($collectionHolderClass);
304+
})
309305
});
310306
311307
The ``addTagForm()`` function's job will be to use the ``data-prototype`` attribute
@@ -319,7 +315,10 @@ one example:
319315

320316
.. code-block:: javascript
321317
322-
function addTagForm($collectionHolder, $newLinkLi) {
318+
function addFormToCollection($collectionHolderClass) {
319+
// Get the ul that holds the collection of tags
320+
$collectionHolder = $($collectionHolderClass);
321+
323322
// Get the data-prototype explained earlier
324323
var prototype = $collectionHolder.data('prototype');
325324
@@ -341,7 +340,8 @@ one example:
341340
342341
// Display the form in the page in an li, before the "Add a tag" link li
343342
var $newFormLi = $('<li></li>').append(newForm);
344-
$newLinkLi.before($newFormLi);
343+
// Add the new form at the end of the list
344+
$collectionHolder.append(prototype)
345345
}
346346
347347
.. note::

0 commit comments

Comments
 (0)
0