@@ -242,7 +242,13 @@ the following ``data-prototype`` attribute to the existing ``<ul>`` in your temp
242
242
243
243
.. code-block :: html+twig
244
244
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>
246
252
247
253
On the rendered page, the result will look something like this:
248
254
@@ -285,27 +291,18 @@ will be show next):
285
291
286
292
.. code-block :: javascript
287
293
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
-
294
294
jQuery (document ).ready (function () {
295
295
// 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
-
296
+ var $tagsCollectionHolder = $ (' ul.tags' );
301
297
// count the current form inputs we have (e.g. 2), use that as the new
302
298
// index when inserting a new item (e.g. 2)
303
- $collectionHolder .data (' index' , $collectionHolder .find (' input' ).length );
299
+ $tagsCollectionHolder .data (' index' , $tagsCollectionHolder .find (' input' ).length );
304
300
305
- $addTagButton .on (' click' , function (e ) {
301
+ $ (' body' ).on (' click' , ' .add_item_link' , function (e ) {
302
+ var $collectionHolderClass = $ (e .currentTarget ).data (' collectionHolderClass' );
306
303
// add a new tag form (see next code block)
307
- addTagForm ($collectionHolder, $newLinkLi );
308
- });
304
+ addFormToCollection ($collectionHolderClass );
305
+ })
309
306
});
310
307
311
308
The ``addTagForm() `` function's job will be to use the ``data-prototype `` attribute
@@ -319,7 +316,10 @@ one example:
319
316
320
317
.. code-block :: javascript
321
318
322
- function addTagForm ($collectionHolder , $newLinkLi ) {
319
+ function addFormToCollection ($collectionHolderClass ) {
320
+ // Get the ul that holds the collection of tags
321
+ var $collectionHolder = $ (' .' + $collectionHolderClass);
322
+
323
323
// Get the data-prototype explained earlier
324
324
var prototype = $collectionHolder .data (' prototype' );
325
325
@@ -341,7 +341,8 @@ one example:
341
341
342
342
// Display the form in the page in an li, before the "Add a tag" link li
343
343
var $newFormLi = $ (' <li></li>' ).append (newForm);
344
- $newLinkLi .before ($newFormLi);
344
+ // Add the new form at the end of the list
345
+ $collectionHolder .append ($newFormLi)
345
346
}
346
347
347
348
.. note ::
0 commit comments