Skip to content

Commit 34ddf47

Browse files
committed
[Collection forms] Make javascript generic
1 parent 52c2ca0 commit 34ddf47

File tree

1 file changed

+19
-17
lines changed

1 file changed

+19
-17
lines changed

form/form_collections.rst

+19-17
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,19 @@ 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);
296+
$tagsCollectionHolder = $('ul.tags');
300297
301298
// count the current form inputs we have (e.g. 2), use that as the new
302299
// index when inserting a new item (e.g. 2)
303-
$collectionHolder.data('index', $collectionHolder.find('input').length);
300+
$tagsCollectionHolder.data('index', $tagsCollectionHolder.find('input').length);
304301
305-
$addTagButton.on('click', function(e) {
302+
$('body').on('click', 'add_item_link', function(e) {
303+
$collectionHolderClass = $(e.currentTarget).data('collectionHolderClass');
306304
// add a new tag form (see next code block)
307-
addTagForm($collectionHolder, $newLinkLi);
308-
});
305+
addFormToCollection($collectionHolderClass);
306+
})
309307
});
310308
311309
The ``addTagForm()`` function's job will be to use the ``data-prototype`` attribute
@@ -319,7 +317,10 @@ one example:
319317

320318
.. code-block:: javascript
321319
322-
function addTagForm($collectionHolder, $newLinkLi) {
320+
function addFormToCollection($collectionHolderClass) {
321+
// Get the ul that holds the collection of tags
322+
$collectionHolder = $($collectionHolderClass);
323+
323324
// Get the data-prototype explained earlier
324325
var prototype = $collectionHolder.data('prototype');
325326
@@ -341,7 +342,8 @@ one example:
341342
342343
// Display the form in the page in an li, before the "Add a tag" link li
343344
var $newFormLi = $('<li></li>').append(newForm);
344-
$newLinkLi.before($newFormLi);
345+
// Add the new form at the end of the list
346+
$collectionHolder.append(prototype)
345347
}
346348
347349
.. note::

0 commit comments

Comments
 (0)