mirror of
https://github.com/Hopiu/jquery-mobile.git
synced 2026-04-25 08:34:43 +00:00
Moved scottjehl's modified sample to a new file (sample-reuse-page-external.html) and restored the original code in sample-reuse-page.html.
This commit is contained in:
parent
6e0912f3b5
commit
b3ce277152
2 changed files with 211 additions and 15 deletions
193
docs/pages/dynamic-samples/sample-reuse-page-external.html
Normal file
193
docs/pages/dynamic-samples/sample-reuse-page-external.html
Normal file
|
|
@ -0,0 +1,193 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<title>changePage JSON Sample</title>
|
||||
<link rel="stylesheet" href="../../../themes/default/">
|
||||
<script src="../../../js/jquery.js"></script>
|
||||
<script src="../../../js/"></script>
|
||||
<script>
|
||||
|
||||
// Some sample categorized data. This data is in-memory
|
||||
// for demonstration purposes, but could be loaded dynamically
|
||||
// via ajax.
|
||||
var categoryData = {
|
||||
animals: {
|
||||
name: "Animals",
|
||||
description: "All your favorites from aardvarks to zebras.",
|
||||
items: [
|
||||
{
|
||||
name: "Pets",
|
||||
},
|
||||
{
|
||||
name: "Farm Animals",
|
||||
},
|
||||
{
|
||||
name: "Wild Animals",
|
||||
}
|
||||
]
|
||||
},
|
||||
colors: {
|
||||
name: "Colors",
|
||||
description: "Fresh colors from the magic rainbow.",
|
||||
items: [
|
||||
{
|
||||
name: "Blue",
|
||||
},
|
||||
{
|
||||
name: "Green",
|
||||
},
|
||||
{
|
||||
name: "Orange",
|
||||
},
|
||||
{
|
||||
name: "Purple",
|
||||
},
|
||||
{
|
||||
name: "Red",
|
||||
},
|
||||
{
|
||||
name: "Yellow",
|
||||
},
|
||||
{
|
||||
name: "Violet",
|
||||
}
|
||||
]
|
||||
},
|
||||
vehicles: {
|
||||
name: "Vehicles",
|
||||
description: "Everything from cars to planes.",
|
||||
items: [
|
||||
{
|
||||
name: "Cars",
|
||||
},
|
||||
{
|
||||
name: "Planes",
|
||||
},
|
||||
{
|
||||
name: "Construction",
|
||||
}
|
||||
]
|
||||
}
|
||||
};
|
||||
|
||||
// Load the data for a specific category, based on
|
||||
// the URL passed in. Generate markup for the items in the
|
||||
// category, inject it into an embedded page, and then make
|
||||
// that page the current active page.
|
||||
function showCategory( url, options )
|
||||
{
|
||||
var categoryName = url.replace(/^.*\/|\.html$/g, ""),
|
||||
|
||||
// Get the object that represents the category we
|
||||
// are interested in. Note, that at this point we could
|
||||
// instead fire off an ajax request to fetch the data, but
|
||||
// for the purposes of this sample, it's already in memory.
|
||||
category = categoryData[ categoryName ],
|
||||
|
||||
// The pages we use to display our content are already in
|
||||
// the DOM. The id of the page we are going to write our
|
||||
// content into is category-items
|
||||
pageSelector = "#category-items";
|
||||
|
||||
if ( category ) {
|
||||
// Get the page we are going to dump our content into.
|
||||
var $page = $( pageSelector ),
|
||||
|
||||
// Get the header for the page.
|
||||
$header = $page.children( ":jqmData(role=header)" ),
|
||||
|
||||
// Get the content area element for the page.
|
||||
$content = $page.children( ":jqmData(role=content)" ),
|
||||
|
||||
// The markup we are going to inject into the content
|
||||
// area of the page.
|
||||
markup = "<p>" + category.description + "</p><ul data-role='listview' data-inset='true'>",
|
||||
|
||||
// The array of items for this category.
|
||||
cItems = category.items,
|
||||
|
||||
// The number of items in the category.
|
||||
numItems = cItems.length;
|
||||
|
||||
// Generate a list item for each item in the category
|
||||
// and add it to our markup.
|
||||
for ( var i = 0; i < numItems; i++ ) {
|
||||
markup += "<li>" + cItems[i].name + "</li>";
|
||||
}
|
||||
markup += "</ul>";
|
||||
|
||||
// Find the h1 element in our header and inject the name of
|
||||
// the category into it.
|
||||
$header.find( "h1" ).html( category.name );
|
||||
|
||||
// Inject the category items markup into the content element.
|
||||
$content.html( markup );
|
||||
|
||||
// Pages are lazily enhanced. We call page() on the page
|
||||
// element to make sure it is always enhanced before we
|
||||
// attempt to enhance the listview markup we just injected.
|
||||
// Subsequent calls to page() are ignored since a page/widget
|
||||
// can only be enhanced once.
|
||||
$page.page();
|
||||
|
||||
// Enhance the listview we just injected.
|
||||
$content.find( ":jqmData(role=listview)" ).listview();
|
||||
|
||||
// We don't want the data-url of the page we just modified
|
||||
// to be the url that shows up in the browser's location field,
|
||||
// so set the dataUrl option to the URL for the category
|
||||
// we just loaded.
|
||||
options.dataUrl = url;
|
||||
|
||||
// Now call changePage() and tell it to switch to
|
||||
// the page we just modified.
|
||||
$.mobile.changePage( $page, options );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Listen for any attempts to call changepage.
|
||||
$(document).bind( "pagebeforechange", function( e, data ) {
|
||||
// We only want to handle changepage calls where the caller is
|
||||
// asking us to load a page by URL.
|
||||
var u = data.toPage;
|
||||
if ( typeof u === "string" ) {
|
||||
// We are being asked to load a page by URL, but we only
|
||||
// want to handle URLs that request the data for a specific
|
||||
// category.
|
||||
|
||||
if ( $.mobile.path.isExternal( u ) && u.match( /\/([^\/\.]+\.html)/ ) ) {
|
||||
|
||||
// We're being asked to display the items for a specific category.
|
||||
// Call our internal method that builds the content for the category
|
||||
// on the fly based on our in-memory category data structure.
|
||||
showCategory( u, data.options );
|
||||
|
||||
e.preventDefault();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div data-role="page">
|
||||
<div data-role="header"><h1>Categories</h1></div>
|
||||
<div data-role="content">
|
||||
<h2>Select a Category Below:</h2>
|
||||
<ul data-role="listview" data-inset="true">
|
||||
<li><a href="animals.html">Animals</a></li>
|
||||
<li><a href="colors.html">Colors</a></li>
|
||||
<li><a href="vehicles.html">Vehicles</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div id="category-items" data-role="page">
|
||||
<div data-role="header"><h1></h1></div>
|
||||
<div data-role="content"></div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -76,9 +76,9 @@ var categoryData = {
|
|||
// the URL passed in. Generate markup for the items in the
|
||||
// category, inject it into an embedded page, and then make
|
||||
// that page the current active page.
|
||||
function showCategory( url, options )
|
||||
function showCategory( urlObj, options )
|
||||
{
|
||||
var categoryName = url.split( "." )[ 0 ],
|
||||
var categoryName = urlObj.hash.replace( /.*category=/, "" ),
|
||||
|
||||
// Get the object that represents the category we
|
||||
// are interested in. Note, that at this point we could
|
||||
|
|
@ -88,8 +88,8 @@ function showCategory( url, options )
|
|||
|
||||
// The pages we use to display our content are already in
|
||||
// the DOM. The id of the page we are going to write our
|
||||
// content into is category-items
|
||||
pageSelector = "#category-items";
|
||||
// content into is specified in the hash before the '?'.
|
||||
pageSelector = urlObj.hash.replace( /\?.*$/, "" );
|
||||
|
||||
if ( category ) {
|
||||
// Get the page we are going to dump our content into.
|
||||
|
|
@ -139,7 +139,7 @@ function showCategory( url, options )
|
|||
// to be the url that shows up in the browser's location field,
|
||||
// so set the dataUrl option to the URL for the category
|
||||
// we just loaded.
|
||||
options.dataUrl = url;
|
||||
options.dataUrl = urlObj.href;
|
||||
|
||||
// Now call changePage() and tell it to switch to
|
||||
// the page we just modified.
|
||||
|
|
@ -156,34 +156,37 @@ $(document).bind( "pagebeforechange", function( e, data ) {
|
|||
// We are being asked to load a page by URL, but we only
|
||||
// want to handle URLs that request the data for a specific
|
||||
// category.
|
||||
var u = data.toPage;
|
||||
|
||||
if ( u.match( /\/([^\/\.]+\.html)/ ) ) {
|
||||
|
||||
var u = $.mobile.path.parseUrl( data.toPage ),
|
||||
re = /^#category-item/;
|
||||
if ( u.hash.search(re) !== -1 ) {
|
||||
// We're being asked to display the items for a specific category.
|
||||
// Call our internal method that builds the content for the category
|
||||
// on the fly based on our in-memory category data structure.
|
||||
showCategory( RegExp.$1, data.options );
|
||||
|
||||
showCategory( u, data.options );
|
||||
|
||||
// Make sure to tell changepage we've handled this call so it doesn't
|
||||
// have to do anything.
|
||||
e.preventDefault();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div data-role="page">
|
||||
<div id="home" data-role="page">
|
||||
<div data-role="header"><h1>Categories</h1></div>
|
||||
<div data-role="content">
|
||||
<h2>Select a Category Below:</h2>
|
||||
<ul data-role="listview" data-inset="true">
|
||||
<li><a href="animals.html">Animals</a></li>
|
||||
<li><a href="colors.html">Colors</a></li>
|
||||
<li><a href="vehicles.html">Vehicles</a></li>
|
||||
<li><a href="#category-items?category=animals">Animals</a></li>
|
||||
<li><a href="#category-items?category=colors">Colors</a></li>
|
||||
<li><a href="#category-items?category=vehicles">Vehicles</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="category-items" data-role="page">
|
||||
<div data-role="header"><h1></h1></div>
|
||||
|
|
|
|||
Loading…
Reference in a new issue