@@ -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,17 @@ 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
-
301
296
// count the current form inputs we have (e.g. 2), use that as the new
302
297
// 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 );
304
299
305
- $addTagButton .on (' click' , function (e ) {
300
+ $ (' body' ).on (' click' , ' add_item_link' , function (e ) {
301
+ $collectionHolderClass = $ (e .currentTarget ).data (' collectionHolderClass' );
306
302
// add a new tag form (see next code block)
307
- addTagForm ($collectionHolder, $newLinkLi );
308
- });
303
+ addFormToCollection ($collectionHolderClass );
304
+ })
309
305
});
310
306
311
307
The ``addTagForm() `` function's job will be to use the ``data-prototype `` attribute
@@ -319,7 +315,10 @@ one example:
319
315
320
316
.. code-block :: javascript
321
317
322
- function addTagForm ($collectionHolder , $newLinkLi ) {
318
+ function addFormToCollection ($collectionHolderClass ) {
319
+ // Get the ul that holds the collection of tags
320
+ $collectionHolder = $ ($collectionHolderClass);
321
+
323
322
// Get the data-prototype explained earlier
324
323
var prototype = $collectionHolder .data (' prototype' );
325
324
@@ -341,7 +340,8 @@ one example:
341
340
342
341
// Display the form in the page in an li, before the "Add a tag" link li
343
342
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)
345
345
}
346
346
347
347
.. note ::
0 commit comments