Beruflich Dokumente
Kultur Dokumente
html
Jo
JavaScript Framework for HTML5
Contents
Developer Guide:
About
Philosophy
Summary
Building
Directory Map
Quick Start
Class Hierarchy
Class Patterns
Data Driven Controls
Observer Pattern
Supported Platforms
Release Notes
License
API Reference:
Core
Data Layer
UI Widgets
Index:
Keywords
1 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
About
Jo is a lightweight JavaScript framework designed for HTML5 apps.
jo does:
jo doesn't:
Author:
Downloads:
Version 0.4.1 is the latest stable release, check the Release Notes for details.
Philosophy
If you want to jam an existing web page into an application framework, jo probably isn't for you. jo
2 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
is designed to create applications. While it will play nicely with a mixture of new and old web
development techniques, it uses HTML5 as a development stack and does not require direct DOM
manipulation.
Application Stack:
JavaScript Application
jo
PhoneGap (optional)
joView joEvent joDataSource
Documentation
All documentation for the framework is based on Markdown and provides a simple, natural and
flexible way to document the code. This simple set of perl scripts has become its own tool called
joDoc.
3 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
Summary
Jo is a JavaScript framework for HTML5 capable browsers and devices. It was originally designed
to work on mobile platforms as a GUI and light data layer on top of PhoneGap. Since its creation, Jo
has also been tested successfully as a lightweight framework for mobile browsers, newer desktop
browsers, and even Dashboard widgets.
Building
It's pretty easy to build on your own, but to get the most out of it you'll want to get a minifier like
jsmin or the YUI Compressor. Minified and gzipped, Jo weighs in around 9K with no other
JavaScript library dependancies.
cd jo
./build
Windows:
cd jo
build.bat
If you're not up for building the library yourself, there's nothing wrong with downloading the latest
stable release, all built and ready to plug in from: jo /downloads">GitHub Downloads
Directory Map
Important files in the directory tree are:
js/jo_min.js
This is the jo library bundled and minified, ready to drop into your project. You will
need to build the library to make this file (as well as the un-minified version jo.js
which is useful for debugging).
4 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
css/aluminum
This is a CSS3 bundle ready to ship your app with. Also serves as a good example of
modern HTML5 styling capabilities. Looks pretty bad in IE up through version 8.
css/jo.css
This is a newer base CSS theme for Jo, preferred over Aluminum for now. Built with
Less CSS compiler.
docs/*.mdown
These are supplimental doc files which are used by joDoc to build out the developer
guide portions of the documentation.
Quick Start
index.html:
The complete jo library is small, so in most cases you'll just want to pull it all in, like this:
<html>
<head>
<link rel="stylesheet" type="text/css" href="css/aluminum.css">
<link rel="stylesheet" type="text/css" href="css/webkit.css">
<!-- <link rel="stylesheet" type="text/css" href="css/webos.css"> -->
<!-- <link rel="stylesheet" type="text/css" href="css/chrome.css"> -->
</head>
<body>
</body>
</html>
If you're using jo to create all the UI for your application, you won't need any content or tags in
your index.html file.
5 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
Since the framework is highly dependent on CSS, your mileage may vary across platforms. In
particular, Internet Explorer before 9 will have limited eye candy and no animated transitions.
You can also completely skin your app with your own CSS, or augment the basic jo CSS to suit
your purposes.
Since jo is geared for HTML5 applications, I recommend you develop and test your apps with
Safari or Chrome before moving to mobile devices. In fact, this makes the code/test/debug cycle
go very quickly.
hello.js:
jo has some initialization which should only be done when your browser is ready to have its DOM
fiddled with, so you may want to wrap your code in a function that's called when your page loads,
or your device signals that your app is ready to go.
// initialize jo
jo.load();
// setup your UI
scn.alert("Hello, Jo!", "This is a simple alert.");
// initialize jo
jo.load();
6 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
Notice above that jo supports "chaining", meaning you can make successive calls inline to a given
object (see the joButton line above for an example).
Of course, it is recommended you use more robust OOP coding patterns to make a proper
application. While there's nothing illegal about putting everything in global space in a single
JavaScript file, but if you're looking to build something big or more easy to maintain, I recommend
you check out "JavaScript: the Good Parts" by Doug Crockford (O'Reilly Press).
Class Hierarchy
The following is a class hierarchy for the framework, organized by general function.
User Interface:
joView
joContainer
joCaption
joCard
joDialog
joFlexcol
joFlexrow
joFooter
joForm
joGroup
joNavbar
joPopup
joScreen
joScroller
joShim
joStack
joStackScroller
joTitle
joToolbar
joControl
7 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
joButton
joBackButton
joCaption
joExpando
joSelect
joHTML
joInput
joDateTime
joPasswordInput
joTextarea
joLabel
joList
joMenu
joSelectList
joTabBar
joTable
joKnob
joSlider
joToggle
joOption
joDivider
Data:
joDatabase
joDataSource
joFileSource
joProperty
joRecord
joSQLDataSource
joYQL
joFile
joScript
Events:
joEvent
joSubject
joGesture
8 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
Processing:
joChain
joDefer
joWait
Utility:
joDOM
joInterface
joJSON
joLocal
joString
joTime
Debugging:
joLog
Application:
jo
joClipboard
joDevice
joFocus
joPreference
joUser
Class Patterns
Instead of a complex set of pseudo-class methods, jo uses a few simple coding patterns: singleton,
base class, subclass, and module. All of these are found in modern JavaScript implementations. A
good reference to have while developing your app is JavaScript: The Good Parts by Douglas
Crockford (O'Reilly Press)
Singleton:
The pattern for creating a singleton is really just an object literal. For example:
9 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
MyApp = {
init: function() {
// some sort of initialization code goes here
},
mymethod: function() {
// some custom method
},
Base Class:
Prototypal inheritance does well with "fat" base classes which do most everything you anticipate a
subclass would want. This type of inheritance benefits greatly from shallow/wide prototypes for a
number of reasons. A base class looks something like:
MyClass = function(x) {
// constructor
this.x = x;
};
MyClass.prototype = {
mymethod: function() {
// some method
},
myothermethod: function() {
// another method
}
};
Subclass:
Strictly speaking, JavaScript doesn't have classes and subclasses. But it does know how to make
copies of an object, and keeps track of "inheritance" through its prototype chain. A subclass in jo
looks something like this:
MySubclass = function(x, y) {
//constructor
this.y = y;
10 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
};
MySubclass.extend(MyClass, {
mynewmethod: function() {
// this subclass has its own new method
}
});
A couple things to note. jo augments the Function object in JavaScript to have an extend() method.
This is just some syntactic sugar which makes it easier to extend an object, giving us a pseudo-
subclass with syntax that's not too awkward. The advantage here is we're using JavaScript's natural
object model behind the scenes. We're not creating any extra fluff, just automating the process
somewhat.
Note that objects created using prototypal inheritance also get the benefit of using JavaScript's
built-in instanceof operator which works up the prototype chain. For example:
You may also notice a "call to super" comment in our MySubclass constructor. This is a convenient
coding pattern which makes it easier to create subclasses, with methods that augment the
superclass' functionality. Like this:
MySubclass.extend(MyClass, {
mynewmethod: function() {
// this subclass has its own new method
},
mymethod: function() {
this.x += 5;
It may look slightly odd at first, but this approach gives us more of the benefits of subclassing
you'd find in other languages without having to step outside of JavaScript's natural object model.
11 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
As a matter of convenience, all children of joControl (which includes most list or widget-driven UI
elements) can be easily tied to data.
The most convenient for most purposes is joRecord. This class wraps a property list, which can be
used to save or load using whatever your application requires. In addition, this class allows you to
link a UI control to the data in one quick action.
For more on this, check out the joRecord docs which include an example or two.
joDoc
joDoc is a plain text code documentation scheme for JavaScript. It was created out of frustration felt
working with various documentation systems available.
/**
myClass
=======
Extends
-------
- someOtherClass
Methods
-------
- setName(name)
Where `name` is a `String`.
Use
---
// here is some sample code which shows how to use this class
12 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
> Note: use of the `name` reserved word is probaly a bad idea.
*/
Comment placement:
1. in your source code (anywhere and in as many pieces as you want) denoted with /** ...
*/ multiline-comment blocks
2. separate markdown ( *.mdown ) files, probably (tho not necessarily) named to match your
JavaScript files
Comparison:
JavaScript is an extremely expressive language which is often difficult to describe in terms of meta
data and fields. Often, important information that needs to be documented just doesn't fit into a
neat, tidy spot.
jsdoc:
jsdoc in its various incarnations and some of its spawn like yuidoc take the approach that "what is
good for Java is good for JavaScript". All these flavors are based on javadoc formatting, and have
been in use for some time.
Aside from the regimented markup being a bit odd to read (admit it, even Java developers don't
love it), it suffers from an inflexibility with regard to all the coding patterns available with
JavaScript. Basically, it fails due for the same reason that all JavaScript libraries which attempt to
subvert JavaScript's natural object model fail. These solutions, while influential in the idea that some
form consistent coding approach could help us make better code, are not in the spirit of embracing
JavaScript.
Why then do so many developers continue to use a documentation tool which was born of the same
well-meaning yet misguided logic of "let's pretend JavaScript is Java"?
Natural Docs:
Excellent effort, but complex to set up and also tries to make a regimented system for documenting
13 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
source code. It is extendable, but again, we have a documentation solution which is trying to force
JavaScript into a more limited set of features.
14 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
Observer Pattern
jo uses a variant on this OOP pattern quite extensively for notifications between objects.
When you think about JavaScript, most of the interesting things that happen are asynchronous: XHR
calls, loading scripts, accessing at database, making device-specific system calls; even user
interactions are all asynchronous in nature.
Instead of trying to hide from this often complex-looking stuff, jo embraces it and provides a
scheme to wrap all these different use cases in a consistent interface using joSubject.
PhoneGap
This excellent, lightweight mobile application library by Nitobi neutralizes device differences and
provides a stable webkit application shell. Jo is designed to work with PhoneGap out of the box,
and it's highly recommended.
LawnChair
Another tool by Nitobi , LawnChair is a client-side storage solution which stores JSON objects (in
SQLite or whatever the device supports). It looks promising, and the jo core has a special subclass
of joDataSource called joLawn which folds Nitobi's library into the Jo event model.
Supported Platforms
Jo is built on HTML5, so anything with decent support for these emerging standards should work
with Jo. The list of devices and platforms you can distribute your apps on is growing, but here's a
list of
Mobile Apps:
Most require PhoneGap to create a native app "shell". webOS doesn't require PhoneGap, but it is
useful for some things.
15 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
Android 2.1+
webOS 1.4+
Symbian ^ 3
It's been reported that Jo works great with newer releases of Blackberry, but I haven't done any
testing with it yet.
Mobile Browsers:
All the mobile app platforms supported by Jo will work, but note that in most cases you'll be
fighting against the browser scroller (Android and webOS, I'm looking at you), and in some cases
event and rendering bugs will make life interesting and might require some CSS fiddling.
Desktop Apps:
HTML5 is making its way into desktop applications. Both native Mac OSX and Windows require
special builds of PhoneGap.
ChromeOS
Windows
Mac OSX 10.5+
Mac OSX DashBoard Widgets
It's been reported that Jo will work with Adobe AIR, but I haven't done any testing with it.
Desktop Browsers:
In general, all modern browsers which have decent HTML5 support will work well with Jo and its
CSS3. Note that Internet Explorer and FireFox 3.x can work, but you will have to play with the CSS
to get things going.
Safari 5+
Chrome 9+
Opera 10+
FireFox 4+
Internet Explorer 8+
For browsers, you will want to include css/browser.css in your project to revert joScroller and
joStackScroller to use native scrollbars.
16 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
Release Notes
Jo 0.4.1:
Emergency fix for joScroller on iOS, was affecting performance and tapability on
controls.
Jo 0.4.0:
Jo 0.3.0:
17 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
CSS Skinning
jo makes extensive use of CSS for its widgets. As a result, it's extremely easy to skin and adapt
your user interface for different devices. The project will have a community-driven theme collection
to help reduce development time by choosing a stylesheet that most closely matches your
application (or device native controls).
HTML Tags
One feature jo exploits is the fact that modern browser engines treat unknown tags as -- tags. So
instead of mucking up your application's DOM and CSS space with a horde of div tags with
different CSS classes, it uses namespaced tags which are outside of your document's typical CSS
name space (except body ).
<jocard>
<jotitle>My title</jotitle>
<jogroup>
<jolabel>Username</jolabel>
<input type="text">
<jodivider></jodivider>
<jobutton>Save</jobutton>
</jogroup>
</jocard>
One side benefit of this is that it is possible to load styled HTML content from another source and
18 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
not have that content's CSS corrupt your application's user interface.
Bottom line here is the special UI controls you add with Jo can coexist with your standard HTML
content-driven tags without undue CSS headaches.
See joInterface and joView for more uses of direct HTML and DOM nodes which are common for
all UI elements.
License
Copyright 2010 Dave Balmer, Jr. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted
provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions
and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of
conditions and the following disclaimer in the documentation and/or other materials
provided with the distribution.
THIS SOFTWARE IS PROVIDED BY DAVE BALMER, JR. "AS IS" AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL DAVE BALMER, JR. OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The views and conclusions contained in the software and documentation are those of the authors
and should not be interpreted as representing official policies, either expressed or implied, of Dave
Balmer, Jr.
19 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
jo
Singleton which the framework uses to store global infomation. It also is responsible for initializing
the rest of the framework, detecting your environment, and notifying your application when jo is
ready to use.
Methods:
load()
This method should be called after your DOM is loaded and before your app uses jo.
Typically, you can call this function from your document's onLoad method, but it is
recommended you use more device-specific "ready" notification if they are available.
getPlatform()
Returns the platform you're running in as a string. Usually this is not needed, but can
be useful.
getVersion()
Returns the version of jo you loaded in the form of a string (e.g. 0.1.1 ).
matchPlatform(string)
Feed in a string list of desired platforms (e.g. "mozilla chrome ipad" ), and
returns true if the identified platform is in the test list.
Events:
loadEvent
unloadEvent
These events are fired after jo loads or unloads, and can be used in your application
to perform initialization or cleanup tasks.
Function
jo extends the Function object to add a few goodies which augment JavaScript in a farily
20 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
non-intrusive way.
Methods:
extend(superclass, prototype)
Gives you an easy way to extend a class using JavaScript's natural prototypal
inheritance. See Class Patterns for more information.
bind(context)
Returns a private function wrapper which automagically resolves context for this
when your method is called.
HTMLElement
This is a standard DOM element for JavaScript. Most of the jo views, continers and controls deal
with these so your application doesn't need to.
Methods:
Not a complete list by any means, but the useful ones for our purposes are:
appendChild(node)
insertChild(before, node)
removeChild(node)
Properties:
innerHTML
className
style
joCache
A singleton which makes it easy to setup deferred object creation and cached results. This is a
performance menchanism initially designed for UI views, but could be extended to handle data
21 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
Methods:
Defines a factory ( call ) for building an object keyed from the key string. The
context argument is optional, but provides a reference for this .
get(key)
Returns an object based on the key string. If an object has not been created which
corresponds to the key , joCache will call the constructor defined to create it and store
the reference for future calls to get() .
Use:
joCache.set("home", function() {
return new joCard([
new joTitle("Home"),
new joMenu([
"Top Stories",
"Latest News",
"Old News",
"No News"
])
]);
});
mystack.push(joCache.get("home"));
22 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
joChain
Class which strings asyncronous calls together.
“ In serious need of rework; doesn't meet original goal of sequencing these calls. This class might
also become deprecated. „
Methods:
joClipboard
Singleton which abstracts the system clipboard. Note that this is a platform dependant interface. By
default, the class will simply store the contents in a special joPreference named "joClipboardData"
to provide clipboard capabilities within your app.
“ Even if you think you're just going to use the default behavior, it is recommended that you
never manipulate the "joClipboardData" preference directly. „
Methods:
get()
set(String)
Low level methods which use just strings. At this time, you will need to stringify
your own data when setting, and extract your data when getting.
cut(joControl)
copy(joControl)
paste(joControl)
23 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
High level methods which work with any joControl or subclass. If a control supports
selections, cut() will automatically remove the selection after copying its contents.
Otherwise, cut() will work the same as copy() .
“ Note: this is not working yet, steer clear (or contribute some working code!) „
joDOM
Singleton with utility methods for manipulating DOM elements.
Methods:
get(id)
Returns an HTMLElement which has the given id or if the id is not a string returns
the value of id.
create(type, style)
Type is a valid HTML tag type. Style is the same as setStyle() method. Returns an
HTMLElement.
// simple
var x = joDOM.create("div", "mycssclass");
// more interesting
var x = joDOM.create("div", {
id: "name",
className: "selected",
background: "#fff",
color: "#000"
});
setStyle(tag, style)
Style can be an object literal with style information (including "id" or "className") or
a string. If it's a string, it will simply use the style string as the className for the new
element.
Note that the preferred and most cross-platform method for working with the DOM
24 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
is to use className and possibly id and put your actual style information in your
CSS file. That said, sometimes it's easier to just set the background color in the code.
Up to you.
getParentWithin(node, ancestor)
Returns an HTMLElement which is the first child of the ancestor which is a parent of
a given node.
addCSSClass(HTMLElement, classname)
removeCSSClass(HTMLElement, classname)
toggleCSSClass(HTMLElement, classname)
Returns the "true" left and top, in pixels, of a given element relative to the page.
applyCSS(css, stylenode)
Applies a css string to the app. Useful for quick changes, like backgrounds and other
goodies. Basically creates an inline <style> tag. This method returns a reference to
the new <style> tag, which you can use with removeCSS() and subsequent calls to
applyCSS() as the stylenode argument.
loadCSS(filename)
Works the same as applyCSS() but loads the CSS from a file instead of a string.
removeCSS(stylenode)
joEvent
Singleton with DOM event model utility methods. Ideally, application-level code shouldn't have to
25 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
Methods:
Set a DOM event listener for an HTMLElement which calls a given Function with an
optional context for this and optional static data. Returns a reference to the handler
function, which is required if you need to remove() later.
This is the same os on() , but captures the event at the node before its children. If in
doubt, use on() instead.
Removes a previously declared DOM event. Note that handler is the return value of
the on() and capture() methods.
stop(event)
preventDefault(event)
block(event)
Useful for preventing dragging the window around in some browsers, also
highlighting text in a desktop browser.
getTarget(event)
joLog
Wrapper for console.log() (or whatever device-specific logging you have). Also could be
extended to send log information to a RESTful service as well, handy for devices which don't have
decent logging abilities.
26 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
Use:
It's an all-in-one utility that's smart enough to ferret out whatever you throw at it and display it in
the console.
Basically, fill it up with strings, variables, objects, arrays and the function will produce a string
version of each argument (where appropriate; browser debuggers tend to display objects nicely) in
the same console line. Simple, effective, easy to use.
joSubject
Class for custom events using the Observer Pattern. This is designed to be used inside a subject to
create events which observers can subscribe to. Unlike the classic observer pattern, a subject can
fire more than one event when called, and each observer gets data from the subject. This is very
similar to YUI 2.x event model.
You can also "lock" the notification chain by using the capture() method, which tells the event to
only notify the most recent subscriber (observer) which requested to capture the event exclusively.
Methods:
Both context and data are optional. Also, you may use the Function.bind(this)
approach instead of passing in the context as a separate argument. All subscribers
will be notified when the event is fired.
unsubscribe(Function, context)
Does what you'd think. The context is only required if you used one when you set
up a subscriber.
Only the last subscriber to capture this event will be notified until it is released. Note
that you can stack capture() calls to produce a modal event heiarchy. Used in
conjunction with the resume() method, you can build an event chain where each
observer can fire the next based on some decision making.
27 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
release(Function, context)
Removes the most recent subscription called with capture() , freeing up the next
subscribers in the list to be notified the next time the event is fired.
fire(data)
Calls subscriber methods for all observers, and passes in: data from the subject, a
reference to the subject and any static data which was passed in the subscribe()
call.
resume(data)
If you used capture() to subscribe to this event, you can continue notifying other
subscribers in the chain with this method. The data parameter, as in fire() , is
optional.
Use:
This is a very flexible way to handle messages between objects. Each subject may have multiple
events which any number of observer objects can subscribe to.
28 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
joTime
Time utility functions. More will be added, but only as needed by the framework. There are entire
libraries dedicated to extensive datetime manipulation, and Jo doesn't pretend to be one of them.
Methods:
timestamp()
Returns a current timestamp in milliseconds from 01/01/1970 from the system clock.
Constants:
Use:
joDefer
Utility function which calls a given method within a given context after n milliseconds with optional
static data.
Use:
Note that delay defaults to 100ms if not specified, and data is optional.
joYield
Deprecated, use joDefer instead.
29 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
joDatabase
Wrapper class for WebKit SQLite database.
Methods:
open(datafile, size)
datafile is a filename, size is an optional parameter for initial allocation size for the
database.
close()
now()
Deprecated convenience method which returns a SQLite-formatted date string for use
in queries. Should be replaced with a utility function in joTime.
joDataSource
Wraps data acquisition in an event-driven class. Objects can subscribe to the changeEvent to
update their own data.
This base class can be used as-is as a data dispatcher, but is designed to be extended to handle
asynchronous file or SQL queries.
Methods:
set()
get()
clear()
setQuery(...)
getQuery()
load()
refresh()
Events:
changeEvent
30 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
errorEvent
Extends:
joDataSource
joFile
A utility method which uses XMLHttpRequest to load a text-like file from either a remote server or
a local file.
“ Note that some browsers and mobile devices will not allow you to load from just any URL,
and some will restrict use with local files especially (I'm looking at you, FireFox).
If your aim is to load JavaScript-like data (also, JSON), you may want to look at joScript
instead, which uses script tags to accomplish the job. „
Calling:
Where:
url is a well-formed URL, or, in most cases, a relative url to a local file
context is an optional scope for the function to call (i.e. value of this ). You can also
ignore this parameter (or pass in null and use Function.bind(this) instead.
31 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
Use:
// an inline function
var y = joFile("http://joapp.com/index.html", function(data, error) {
if (error) {
console.log("error loading file");
return;
}
console.log(data);
});
joPreference
A class used for storing and retrieving preferences in your application.
The interface for this is changing. joPreference will become a specialized application-level extension of
joRecord in the near future. Until then, you should use joRecord to achieve this use-case.
Extends:
joRecord
joRecord
An event-driven wrapper for an object and its properties. Useful as a data interface for forms and
other collections of UI controls.
Extends:
joDataSource
Methods:
link(property)
32 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
save()
Saves the object's data. The base class does not itself save the data; you will need to
make your own action for the save method, or have something which subscribes to
the saveEvent .
load()
Loads the object's data, and fires off notifications to any UI controls which are linked
to this joRecord object. Same as the save() method, you will have to make this
function do some actual file loading if that's what you want it to do.
getProperty(property)
setProperty(property, value)
getDelegate(property)
Returns a reference to the joProperty object which fires off events for data changes
for that property. If none exists, one is created. This method is used by the link()
method, and can be overriden if you extend this class to provide some other flavor
of a joDataSource to manage events for your properties.
Use:
// setup a joRecord
var r = new joRecord({
user: "Jo",
password: "1234",
active: true
});
33 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
new joFlexBox([
new joLabel("Active"),
new joToggle(r.link("active"))
])
]);
And if you want the data to be persistent, or interact with some cloud service, you'll need to do
something like this:
You could also make your own subclass of joRecord with your own save and load methods using
extend() like this:
load: function() {
// do an AJAX or SQL call here
}
}
See Class Patterns for more details on this method of "subclassing" in JavaScript.
joProperty
Used by joRecord to provide an event-driven binding to properties. This class is instantiated by
joRecord and not of much use on its own.
34 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
Extends:
joDataSource
Use:
joScript
Script tag loader function which can be used to dynamically load script files or make RESTful calls
to many JSON services (provided they have some sort of callback ability). This is a low-level utility
function.
url
callback is a function (supports bind, in which case context is optional)
context (usually this , and is optional)
Returns:
Calls your handler method and passes a truthy value if there was an error.
Use:
joSQLDataSource
35 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
Methods:
setDatabase(joDatabase)
setQuery(query)
setParameters(arguments)
execute(query, arguments)
Events:
changeEvent
errorEvent
Extends:
joDataSource
joYQL
A joDataSource geared for YQL RESTful JSON calls. YQL is like SQL, but for cloud services.
Pretty amazing stuff:
“ The Yahoo! Query Language is an expressive SQL-like language that lets you query, filter,
and join data across Web services. With YQL, apps run faster with fewer lines of code and a
smaller network footprint.
Yahoo! and other websites across the Internet make much of their structured data available to
developers, primarily through Web services. To access and query these services, developers
traditionally endure the pain of locating the right URLs and documentation to access and
query each Web service.
With YQL, developers can access and shape data across the Internet through one simple
language, eliminating the need to learn how to call different APIs. „
36 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
Use:
A more robust example with parameters in the query could look something like this:
Methods:
setQuery()
exec()
Extends:
37 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
joDataSource
38 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
joBusy
The idea here is to make a generic "spinner" control which you can overlay on other controls. It's
still in flux, don't use it just yet.
Extends:
joView
Methods:
setMessage(status)
You can update the status message in this busy box so users have a better idea why
the busy box is showing.
joButton
Button control.
// simple invocation
var x = new joButton("Done");
Extends:
joControl
Methods:
enable()
disable()
39 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
joCaption
Basically, a paragraph of text.
Extends:
joControl
joCard
Special container for card views, more of an application-level view.
Extends:
joContainer
Methods:
activate()
deactivate()
These methods are called automatically by various joView objects, for now joStack is
the only one which does. Basically, allows you to add application-level handlers to
initialize or cleanup a joCard.
joCollect
DEPRECATED use joInterface instead. This function is planned to die when jo goes beta.
joContainer
A view which is designed to contain other views and controls. Subclass to provide different layout
types. A container can be used to intantiate an entire tree of controls at once, and is a very powerful
UI component in jo.
40 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
Use:
// plain container
var x = new joContainer();
// HTMLElement
var w = new joContainer(joDOM.get("mydiv"));
Extends:
joView
Events:
changeEvent
Methods:
setData(data)
The constructor calls this method if you provide data when you instantiate (see
example above)
push(data)
41 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
Same support as setData() , but places the new content at the end of the existing
content.
setTitle(string)
getTitle(string)
Titles are optional, but used with joStack & joStackScroller to update a joNavbar
control automagically.
joControl
Interactive, data-driven control class which may be bound to a joDataSource, can receive focus
events, and can fire off important events which other objects can listen for and react to.
Extends:
joView
Events:
changeEvent
selectEvent
Methods:
setValue(value)
Many controls have a value in addition to their data. This is particularly useful for
joList , joMenu , joOption and other controls which has a list of possibilities (the
data) and a current seletion from those (the value).
enable()
disable()
Enable or disable the control, pretty much does what you'd expect.
focus()
blur()
42 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
setDataSource(joDataSource)
setValueSource(joDataSource)
setReadOnly(state)
Certain controls can have their interaction turned off. State is either true or false .
See Also:
joRecord and joProperty are specialized joDataSource classes which make it simple to
bind control values to a data structure.
joDialog
This is a higher level container that wraps a joPopup with a joShim.
joDivider
Simple visual divider.
Extends:
joView
joExpando
A compound UI element which allows the user to hide/show its contents. The first object passed in
becomes the trigger control for the container, and the second becomes the container which expands
and contracts. This action is controlled in the CSS by the presence of the "open" class.
Use:
43 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
Note that joExpando doesn't care what sort of controls you tell it to use. In this example, we have a
joButton that hides and shows a DOM element:
Extends:
joContainer
Methods:
open()
close()
toggle()
Events:
openEvent
closeEvent
joExpandoContent
New widget to contain expando contents. This is normally used with joExpando, but not required.
Extends:
44 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
joContainer
joExpandoTitle
Common UI element to trigger a joExpando. Contains a stylable arrow image which indicates
open/closed state.
Extends:
joControl
Use:
joFlexrow
Uses the flexible box model in CSS to stretch elements evenly across a row.
Use:
Extends:
joContainer
joFlexcol
Uses the flexible box model in CSS to stretch elements evenly across a column.
45 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
Use:
Extends:
joContainer
joFocus
Singleton which manages global input and event focus among joControl objects.
Methods:
set(joControl)
Unsets focus on the last control, and sets focus on the control passed in.
clear()
refresh()
joFooter
Attempt to make a filler object which pushed subsequent joView objects further down in the
container if possible (to attach its contents to the bottom of a card, for eaxmple).
“ This behavior requires a working box model to attach properly to the bottom of your container
view. „
46 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
Extends:
joContainer
joGesture
Experimental global gesture handler (keyboard, dpad, back, home, flick?). This needs a lot more
fleshing out, so it's not (quite) ready for general consumption.
Events:
upEvent
downEvent
leftEvent
rightEvent
backEvent
forwardEvent
homeEvent
closeEvent
activateEvent
deactivateEvent
“ Note that the events setup here are for the browser or webOS. The setEvents method most
likely needs to change based on which OS you're running, although looking more deeply into
PhoneGap event layer. „
joGroup
Group of controls, purely visual.
Extends:
joContainer
joHTML
47 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
A simple HTML content control. One interesting feature is it intercepts all <a> tag interactions and
fires off a selectEvent with the contents of the tag's href property.
This is a relatively lightweight approach to displaying arbitrary HTML data inside your app, but it
is not recommended you allow external JavaScript inside the HTML chunk in question.
Also keep in mind that your app document already has <html> , <head> and <body> tags. When
you use the setData() method on this view, make sure you don't use any of these tags to avoid weird
issues.
joControl
Use:
joInput
Single-line text input control. When you instantiate or use setData() , you can either pass in an
initial value or a reference to a joDataSource object which it, like other joControl instances, will bind
to.
Use:
48 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
username: "Bob",
password: "password"
});
Extends:
joControl
Methods:
focus()
blur()
You can manually set focus or call the blur() method (which also triggers a data
save).
setData()
Pass in either some arbitrary value for the control, or a reference to a joDataSource if
you want to automatically bind to a storage system (e.g. joPreference).
joInterface
EXPERIMENTAL
“ This utility method is experimental! Be very careful with it. NOTE that for now, this class
requires you to remove whitespace in your HTML. If you don't know a good approach offhand
to do that, then this thing probably isn't ready for you yet. „
This class parses the DOM tree for a given element and attempts to attach appropriate joView
subclasses to all the relevant HTML nodes. Returns an object with references to all elements with
the id attribute set. This method helps turn HTML into HTML + JavaScript.
Use:
49 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
Returns:
A new object with a property for each element ID found. For example:
This in essence flattens your UI to a single set of properties you can use to access the controls that
were created from your DOM structure.
In addition, any unrecognized tags which have an id attribute set will also be loaded into the
properties.
50 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
Yes, you can make a joInterface that encapsulates your entire UI with HTML. This is not
recommended for larger or more complex applications, some reasons being:
Rendering speed: if you're defining multiple views within a <jostack> (or another
subclass of joContainer), your users will see a flicker and longer load time while the
window renders your static tags and the extra views for the stack are removed from
view.
Double rendering: again with <jostack> tags, you're going to see a separate render
when the first view is redrawn (has to).
Load time: especially if you're doing a mobile app, this could be a biggie. You are
almost always going to be better off building the app controls with JavaScript
(especially in conjunction with joCache, which only creates DOM nodes for a given
view structure on demand).
If you really want to use HTML as your primary means of defining your UI, you're better off
putting your major UI components inside of a <div> (or other tag) with display: none set in its
CSS property. Like this:
Definitely use this class judiciously or you'll end up doing a lot of recatoring as your application
grows.
51 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
This is both good and bad, depending on your coding style and complexity of your app. Because
all the tags with an ID attribute (regardless of where they are in your tag tree) get a single
corresponding property reference, things could get very messy in larger apps. Again, be smart.
joLabel
Label view, purely a visual presentation. Usually placed in front of input fields and other controls.
Extends:
joView
joList
A widget class which expects an array of any data type and renders the array as a list. The list
control handles DOM interactions with only a single touch event to determine which item was
selected.
Extends:
joControl
Events:
selectEvent
Fired when an item is selected from the list. The data in the call is the index of the
item selected.
changeEvent
Methods:
formatItem(data, index)
When subclassing or augmenting, this is the method responsible for rendering a list
item's data.
52 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
compareItems(a, b)
For sorting purposes, this method is called and should be overriden to support
custom data types.
setIndex(index)
getIndex()
refresh()
setDefault(message)
Will present this message (HTML string) when the list is empty. Normally the list is
empty; this is a convenience for "zero state" UI requirements.
getNodeData(index)
getLength()
next()
prev()
setAutoSort(boolean)
joMenu
Simple menu class with optional icons.
Extends:
joList
53 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
Methods:
setData(menudata)
See the example below for the format of the menu data.
Use:
// simple inline menu; you can always setup the menu items (or change
// them) but using the `setData()` method, same as any joView
var menu = new joMenu([
{ title: "About" },
{ title: "Frequently Asked Questions", id: "faq" },
{ title: "Visit our website", id: "visit", icon: "images/web" }
]);
Advanced Use:
This could actually be called "more consistent and simple" use. If your menus are static, you could
always setup an id-based dispatch delegate which pushes the appropriate card based on the menu
id selected.
You could use the id in conjunction with view keys you create with joCache. The handler would
then be something like:
menu.selectEvent.subscribe(function(id) {
mystack.push(joCache.get(id));
});
54 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
joNavbar
Floating navigation control. Usually tied to a joStack or joStackScroller. Will handle display of a
"back" button (controllable in CSS) and show the title string of the current view in a stack (if it
exists).
Use:
// make a stack
var stack = new joStackScroller();
// new navbar
var x = new joNavbar();
// link to a stack
x.setStack(stack);
Methods:
back()
Signals the associated stack to move back in its stack (i.e. calls the stack's pop()
method).
setStack(joStack or joStackScroller)
joBackButton
A "back" button, which can be made to be shown only in appropriate platforms (e.g. iOS, Safari,
Chrome) through CSS styling.
Extends:
joButton
55 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
joOption
This controls lets the user select one of a few options. Basically, this is a menu with a horizontal
layout (depending on your CSS).
Use:
Extends:
joMenu
joPasswordInput
Secret data input field (e.g. displays ****** instead of secret ).
Extends:
56 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
joInput
“ Note that this requires CSS3 which is known not to be currently supported in Opera or
Internet Explorer. „
joPopup
A simple popup control. Pass in the UI contents as you would any other subclass of joContainer
(e.g. joCard).
Methods:
show()
hide()
Extends:
joContainer
Events:
showEvent
hideEvent
joScreen
Abstraction layer for the device screen. Uses document.body as its DOM element and allows other
controls to be nested within (usually a joStack or other high-level containers or controls).
Methods:
Simple alert box. The buttons parameter is optional; a simple "OK" button is added
if nothing is specified.
57 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
showPopup(joView)
hidePopup(joView)
These methods allow you to do a completely custom modal joPopup. Pass in either a
joView, an array of them, or and HTMLElement or a string, the same as you would
when you create a joCard or other child of joContainer.
Extends:
joContainer
Use:
Events:
resizeEvent
menuEvent
activateEvent
deactivateEvent
backEvent
forwardEvent
joScroller
58 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
A scroller container. Ultimately, mobile webkit implementations should properly support scrolling
elements that have the CSS overflow property set to scroll or auto . Why don't they, anyway?
Until some sanity is adopted, we need to handle this scrolling issue ourselves. joScroller expects a
single child to manage scrolling for.
Use:
Extends:
joContainer
Methods:
scrollBy(position)
Scrolls to the position or the view or element. If you specify an element or view,
make sure that element is a child node, or you'll get interesting results.
setScroll(horizontal, vertical)
Tells this scroller to allow scrolling the vertical, horizontal, both or none.
joSelect
59 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
Multi-select control which presents a set of options for the user to choose from.
Methods:
setValue(value)
Set the current value, based on the index for the option list.
getValue()
Extends:
joExpando
Consumes:
joSelectTitle
joSelectList
Properties:
field
list
Use:
60 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
joSelectTitle
joSelect flavor of joExpandoTitle.
Extends:
joExpandoTitle
joSelectList
A selection list of options used by joSelect.
Extends:
joList
joShim
A simple screen dimmer. Used mostly for popups and other modal use cases.
Methods:
show()
hide()
Extends:
joView
Events:
showEvent
hideEvent
61 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
joSlider
Slider control, horizontal presentation (may be extended later to allow for vertical and x/y).
Extends:
joControl
Methods:
Where min /max is a number, either integer or decimal, doesn't matter. If max and min are integers,
then snap defaults to 1 , otherwise it is set to 0 (no snap, which allows free movement).
The optional snap value adjusts the granularuty of choices. Set to 0 for free-floating, or any other
positive number. Any snap that is less than 0 or greater than the total range of possible values will
be ignored.
Use:
joSound
Play preloaded sound effects using the HTML5 Audio object. This module could be wildly
different for various platforms. Be warned.
62 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
Methods:
play()
pause()
rewind()
stop()
setLoop(n)
Tell the joSound to automatically loop n times. Set to -1 to loop continuously until
pause() .
setVolume(level)
Events:
endedEvent
errorEvent
joStack
A UI container which keeps an array of views which can be pushed and popped.
The DOM elements for a given view are removed from the DOM tree when popped so we keep the
render tree clean.
Extends:
joView
Methods:
push(joView | HTMLElement)
63 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
pop()
Pulls the current view off the stack and goes back to the previous view.
home()
Return to the first view, pop everything else off the stack.
show()
hide()
forward()
back()
Much like your browser forward and back buttons, only for the stack.
setLocked(boolean)
The setLocked() method tells the stack to keep the first view pushed onto the stack
set; that is, pop() won't remove it. Most apps will probably use this, so setting it as a
default for now.
Events:
showEvent
hideEvent
homeEvent
pushEvent
popEvent
Notes:
Should set classNames to new/old views to allow for CSS transitions to be set (swiping in/out,
cross fading, etc). Currently, it does none of this.
Also, some weirdness with the new forward() and back() methods in conjuction with push() --
need to work on that, or just have your app rigged to pop() on back to keep the nesting simple.
64 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
joStackScroller
What happens when you mix joStack and joScroller? You get this class. Use exactly as you would
joStack, only it automatically puts a scroller in the stack as needed. At some point, this might get
folded into joStack, but for now it's a special class.
Extends:
joStack
joScroller
joTabBar
Tab bar widget.
Extends:
joList
Model:
Data is expected to be an array of { type: "", label: ""} objects, in the display order for the
bar.
joTable
Table control, purely visual representation of tabular data (usually an array of arrays).
Use:
65 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
Extends:
joList
Methods:
setCell(row, column)
Sets the active cell for the table, also makes it editiable and sets focus.
getRow() , getCol()
joTextarea
Multi-line text input control. When you instantiate or use setData() , you can either pass in an
initial value or a reference to a joDataSource object which it, like other joControl instances, will bind
to.
Use:
66 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
maxHeight: "300px"
});
Extends:
joInput
joTitle
Title view, purely a visual presentation.
Extends:
joContainer
joToggle
Boolean widget (on or off).
Methods:
setLabels(Array)
You can change the labels for this control, which default to "Off" and "On".
Extends:
joControl
67 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
Use:
// simple
var x = new joToggle();
// with value
var y = new joToggle(true);
joToolbar
Locks UI controls to the bottom of whatever you put this container into.
Extends:
joContainer
joView
Base class for all other views, containers, controls and other visual doo-dads.
Use:
Where data is either a text or HTML string, an HTMLElement, or any joView object or subclass.
Methods:
setData(data)
getData()
createContainer(type, classname)
setContainer(HTMLElement)
getContainer()
68 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
clear()
refresh()
attach(HTMLElement or joView)
detach(HTMLElement or joView)
Convenience methods which allow you to append a view or DOM node to the
current view (or detach it).
69 of 70 05/01/2011 11:54 PM
Jo HTML5 Mobile App Framework Documentaion http://joapp.com/docs/index.html
Index
70 of 70 05/01/2011 11:54 PM