jQuery Mobile: vistas de lista anidadas

Descripción

Incluya la extensión de vista de lista anidada para permitir la respuesta anidada en jQuery mobile y establezca la opción childpages en false para una lista específica. jQuery mobile 1.3 restaura la extensión de vista de lista anidada en jQuery mobile 1.4.

Ejemplo

El siguiente ejemplo demuestra el uso de listview anidado en jQuery Mobile.

<!DOCTYPE html>
<html>
   <head>
      <meta name = "viewport" content = "width = device-width, initial-scale = 1">
      <link rel = "stylesheet" href = "https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css">
      <script src = "https://code.jquery.com/jquery-1.11.3.min.js"></script>
      <script src = "https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
      
      <script>
         (function( $, window, undefined ) {
            $.widget( "mobile.listview", $.mobile.listview, {
               options: {
                  childPages: true,
                  page: "<div data-role = 'page'></div>",
                  header: "<div data-role = 'header'><a href = '#' 
                     data-rel = 'back'>Back</a><h1></h1></div>",
                  content: "<div class = 'ui-content'></div>"
               },

               _create: function() {
                  this._super();
                  if( this.options.childPages ) {
                     this._setupChildren();
                  }
               },
               
               _setupChildren: function() {
                  this._attachBindings();
                  this.element.find( "ul" )
                  .css( "display","none" )
                  .parent()
                  .addClass("ui-btn ui-btn-icon-right ui-icon-carat-r");
               },
               
               _attachBindings: function() {
                  this._on ({
                     "click": "_handleSubpageClick"
                  });
                  
                  this._on( "body", {
                     "pagechange": function() {
                        if ( this.opening === true ) {
                           this.open = true;
                           this.opening = false;
                        } else if ( this.open === true ) {
                           this.newPage.remove();
                           this.open = false;
                        }
                     }
                  });
               },
               
               _handleSubpageClick: function( event ) {
                  if( $(event.target).closest( "li" ).children( "ul" ).length == 0 ) {
                     return;
                  }
               
                  this.opening = true;
                  this.newPage = $( this.options.page ).uniqueId();
                  this.nestedList = $( event.target ).children( "ul" )
                  .clone().attr( "data-" + $.mobile.ns + "role", "listview" )
                  .css( "display", "block" );
                  this.pageName = (
                     $( event.target.childNodes[0] ).text().replace(/^\s+|\s+$/g, '').length > 0 )?
                     $( event.target.childNodes[0] ).text() : $( event.target.childNodes[1] ).text();
                     this.pageID = this.newPage.attr( "id" );

                     // Build new page
                     this.newPage.append (
                        $( this.options.header ).find( "h1" ).text( this.pageName ).end()
                     )
                  
                  .append (
                     $( this.options.content )
                  )

                  .find( "div.ui-content" ).append( this.nestedList );
                  $( "body" ).append( this.newPage );
                  $( "body" ).pagecontainer( "change", "#" + this.pageID );
               }
            });
         })( jQuery, this );
      </script>
   </head>
   
   <body>
      <ul data-role = "listview" data-inset = "true">
         <li data-role = "list-divider">State Names</li>
         <li>
            Karnataka
            <ul>
               <li>Bangalore</li>
               <li>Belgaum</li>
               <li>Hubli</li>
               <li>Mangalore</li>
               <li>Dharwad</li>
            </ul>
         </li>
         
         <li>
            Maharashtra
            <ul>
               <li>Mumbai</li>
               <li>Pune</li>
               <li>Satara</li>
               <li>Sangali</li>
               <li>Thane</li>
            </ul>
         </li>
         
         <li>
            Tamil Nadu
            <ul>
               <li>Chennai</li>
               <li>Coimbator</li>
               <li>Madurai</li>
               <li>Vellore</li>
               <li>Ooty</li>
            </ul>
         </li>
      </ul>
   </body>
</html>

Salida

Realicemos los siguientes pasos para ver cómo funciona el código anterior:

  • Guarde el código html anterior como listview_nested_lists.html archivo en la carpeta raíz de su servidor.

  • Abra este archivo HTML como http: //localhost/listview_nested_lists.html y se mostrará el siguiente resultado.