Search code examples
jqueryjquery-pluginsjcarousel

jCarousel: Can you remove all items and rebind to a new collection?


jCarousel documentation states the following:

  • By passing the callback function itemLoadCallback as configuration option, you are able to dynamically create (li) items for the content.
    {...}
  • jCarousel contains a convenience method add() that can be passed the index of the item to create and the innerHTML string of the item to be created.

My Question:

Is it possible to remove all items and rebind to a new collection?

BTW: I don't necessarily need a "convenience method" to do this. I'm very open to workarounds.
FYI: This strategy doesn't seem to work.


Solution

  • You can do this but you need to keep a reference to the carousel around and call reset on it. This can be achieved by using the initCallback option you pass to the jcarousel function.

    function carousel_callback( carousel, state) {
        // BWA-HA...I have the carousel now....FEEL THE POWER!
    
        // reset empties it out
        $('#reset-caro').click( function( evt ) {
            carousel.reset();
        });
    
        // here's how to call add
        $('#add-to').click( function( evt ) {
            // ..this just adds to the first spot..modify as needed
            carousel.add(0, "<li>O HAI!</li>");
        });
    }
    
    $(document).ready(function() {
        $('#mycarousel').jcarousel( {
            initCallback: carousel_callback
        });
    });
    

    Here's my HTML:

      <a id="reset-caro" href="#">reset</a>
    
      <a id="add-to" href="#">add</a>  
    
      <ul id="mycarousel" class="jcarousel-skin-tango">
        <li>MOM</li>
        <li>DAD</li>
        <li>BROTHER</li>
        <li>SISTER</li>
      </ul>