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