src/cm/media/js/lib/yui/yui_3.10.3/docs/app/index.html
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 525 89ef5ed3c48b
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     1
<!DOCTYPE html>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     2
<html lang="en">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     3
<head>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     4
    <meta charset="utf-8">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     5
    <title>App Framework</title>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     6
    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=PT+Sans:400,700,400italic,700italic">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     7
    <link rel="stylesheet" href="../../build/cssgrids/cssgrids-min.css">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     8
    <link rel="stylesheet" href="../assets/css/main.css">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     9
    <link rel="stylesheet" href="../assets/vendor/prettify/prettify-min.css">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    10
    <link rel="shortcut icon" type="image/png" href="../assets/favicon.png">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    11
    <script src="../../build/yui/yui-min.js"></script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
</head>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
<body>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
<!--
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
<a href="https://github.com/yui/yui3"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png" alt="Fork me on GitHub"></a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
-->
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
<div id="doc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
    <div id="hd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
        <h1><img src="http://yuilibrary.com/img/yui-logo.png"></h1>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
        <a href="#toc" class="jump">Jump to Table of Contents</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
            <h1>App Framework</h1>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
    <div class="yui3-g">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
        <div class="yui3-u-3-4">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
            <div id="main">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
                <div class="content"><div class="intro">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
The YUI App Framework is a rollup of the <a href="#app-component">App</a>, <a href="../model/index.html">Model</a>, <a href="../model-list/index.html">Model List</a>, <a href="../router/index.html">Router</a>, and <a href="../view/index.html">View</a> components, combined to form a simple MVC-style framework for writing single-page JavaScript applications.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
You can use these components separately or together to create anything from simple non-interactive views to rich applications with URL-based routing, data binding, and full client-server synchronization.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
If you've used <a href="http://www.documentcloud.org/">DocumentCloud</a>'s excellent <a href="http://documentcloud.github.com/backbone/">Backbone.js</a> framework, many of the classes and APIs provided by App Framework components will look familiar to you. There are important differences, though, and the App Framework takes full advantage of YUI's powerful component and event infrastructure under the hood.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
<h2 id="getting-started">Getting Started</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
To include the source files for App Framework and its dependencies, first load
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
the YUI seed file if you haven't already loaded it.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
<pre class="code prettyprint">&lt;script src=&quot;http:&#x2F;&#x2F;yui.yahooapis.com&#x2F;3.10.3&#x2F;build&#x2F;yui&#x2F;yui-min.js&quot;&gt;&lt;&#x2F;script&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
Next, create a new YUI instance for your application and populate it with the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
modules you need by specifying them as arguments to the <code>YUI().use()</code> method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
YUI will automatically load any dependencies required by the modules you
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
specify.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
<pre class="code prettyprint">&lt;script&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
&#x2F;&#x2F; Create a new YUI instance and populate it with the required modules.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
YUI().use(&#x27;app&#x27;, function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
    &#x2F;&#x2F; App Framework is available and ready for use. Add implementation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
    &#x2F;&#x2F; code here.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
&lt;&#x2F;script&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
For more information on creating YUI instances and on the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
<a href="http://yuilibrary.com/yui/docs/api/classes/YUI.html#method_use"><code>use()</code> method</a>, see the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
documentation for the <a href="../yui/index.html">YUI Global Object</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
<h2 id="components-of-the-app-framework">Components of the App Framework</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
The <code>app</code> module is a rollup module consisting of the following individual components. These components may also be used individually if you don't need all of them at the same time.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
<table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
  <thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
      <th>Component</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
      <th>Module</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
      <th>Description</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
  </thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
  <tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
      <td><a href="#app-component">App</a></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
      <td style="white-space: nowrap;"><code>app-base</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
      <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
        Provides a top-level application component which manages navigation and views. This gives you a foundation and structure on which to build your application; it combines robust URL navigation with powerful routing and flexible view management.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
      </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
      <td><a href="../model/index.html">Model</a></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
      <td><code>model</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
      <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
        A lightweight <a href="http://yuilibrary.com/yui/docs/api/classes/Attribute.html"><code>Y.Attribute</code></a>-based data model with APIs for getting, setting, validating, and syncing attribute values to a persistence layer or server, as well as events for notifying subscribers of model changes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
      </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
      <td><a href="../model-list/index.html">Model List</a></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
      <td style="white-space: nowrap;"><code>model-list</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
      <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
        An array-like ordered list of <code>Y.Model</code> instances with APIs for adding, removing, sorting, filtering, and performing other actions on models in the list. Acts as a bubble target for events fired by the models in the list.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
      </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
      <td><a href="../router/index.html">Router</a></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
      <td><code>router</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
      <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
        Provides URL-based same-page routing using <a href="https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history">HTML5 history</a> (<code>pushState</code>) or the location hash, depending on what the user's browser supports.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
      </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
      <td><a href="../view/index.html">View</a></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
      <td><code>view</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
      <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
        Represents a piece of an application's user interface and is responsible for rendering content and handling DOM events. Views are commonly associated with Models or Model Lists and are re-rendered when they change, although this isn't required.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
      </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
  </tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
</table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
<h2 id="app-component">App Component</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
App is a high-level component that builds upon other components in the App Framework. The App component is composed of <a href="../router/index.html">Router</a> and <a href="../view/index.html">View</a>, and also the <a href="../pjax/index.html">Pjax</a> utility. This combination creates a solid foundation and structure on which to build your application. It connects together robust URL navigation with powerful routing and flexible view management.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
The goal of the App component is to provide you a place to organize and connect together the parts of your application. App implements infrastructural pieces which are common to all apps — such as <a href="#view-management">managing views</a> and the <a href="#navigating-between-pages">navigation between pages</a> — allowing you to focus on the specifics of <em>your</em> app.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
App will enable you to seamlessly enhance the user experience and performance of traditional client/server apps. It enables you to create richer interactions without compromising standard browser behavior, URLs, or search engine crawl-ability. The <a href="#routing-coordination-with-server">Routing Coordination with Server</a> section of this guide contain details on accomplishing this.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
You can also use the App component to build client-only apps for when there is no server, or the server is not capable of routing and handling requests. There are <strong>drawbacks to client-only apps</strong> which you need to be aware of and fully understand their implications. Be sure to read the <a href="#progressively-enhanced-vs-client-only-apps">Progressively-enhanced vs. Client-only Apps</a> section which contains details on these drawbacks and best practices.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   160
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
The remaining sections of this guide provide details on what you'll need to know to start working with the App component. Refer to the previous section for information about the <a href="#components-of-the-app-framework">other components of the App Framework</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   166
<h2 id="using-app">Using App</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   167
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   168
<h3 id="instantiating-app">Instantiating App</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   170
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   171
Creating an App instance couldn't be any simpler:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   172
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   173
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   174
<pre class="code prettyprint">var app = new Y.App();</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   175
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   176
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   177
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   178
Two instantiable classes are provided by the <code>app-base</code> module: <code>Y.App</code>, and <code>Y.App.Base</code>. The difference between these is that <code>Y.App.Base</code> provides the basic app functionality and will remain pure; whereas <code>Y.App</code> (which extends <code>Y.App.Base</code>) will have all of the app-component extensions automatically mixed-in when they are included in the YUI instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   179
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   180
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   181
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   182
In the following example, we are including both the <code>app-base</code> and <code>app-transitions</code> modules. When the <code>app-transitions</code> module is added to the YUI instance it will automatically mix itself into the <code>Y.App</code> class, adding transitions to all <code>Y.App</code> instances, but <code>Y.App.Base</code> will remain unaffected by the inclusion of this module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   183
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   184
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   185
<pre class="code prettyprint">YUI().use(&#x27;app-base&#x27;, &#x27;app-transitions&#x27;, function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   186
    &#x2F;&#x2F; This will create two YUI Apps, &#x60;basicApp&#x60; will not have transitions,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   187
    &#x2F;&#x2F; but &#x60;fancyApp&#x60; will have transitions support included and turn itself on.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   188
    var basicApp = new Y.App.Base(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   189
        fancyApp = new Y.App({transitions: true});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   190
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   191
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   192
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   193
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   194
While App instances are usable without any configuration, any non-trivial app will need to be configured. You might also want to extend <code>Y.App</code> by mixing-in additional functionality, or even create a custom App class to implement the specific features of your application. The <a href="#extending-yapp">Extending <code>Y.App</code></a> section explains how to do this.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   195
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   196
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   197
<h4 id="config-properties">Config Properties</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   198
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   199
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   200
When constructing a new <code>Y.App</code> instance you can provide a config object with initial values for <a href="#app-attributes">attributes</a> along with values for <a href="../view/index.html#view-properties"><code>Y.View</code>'s properties</a> and <a href="../api/classes/Base.html"><code>Y.Base</code>'s "special" properties</a> (used only during initialization). In addition to these, the following non-attribute properties have specific initialization logic applied and can be passed to the <code>Y.App</code> constructor:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   201
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   202
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   203
<dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   204
  <dt><code>views</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   205
  <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   206
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   207
    Hash of view-name to metadata used to declaratively describe an application's views and their relationship with the app and its other views. The views specified here will override any defaults provided by the <code>views</code> object on the <code>prototype</code>. Every <code>Y.App</code> instance gets its own copy of a <code>views</code> object so this object on the prototype will not be polluted.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   208
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   209
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   210
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   211
    See the <a href="#app-properties">App Properties</a> and <a href="#declaring-views">Declaring Views</a> sections for more details.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   212
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   213
  </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   214
</dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   215
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   216
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   217
Here's an example that defines some <code>views</code> at instantiation time:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   218
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   219
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   220
<pre class="code prettyprint">var app = new Y.App({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   221
    views: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   222
        home : {preserve: true},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   223
        users: {preserve: true},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   224
        user : {parent: &#x27;users&#x27;}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   225
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   226
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   227
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   228
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   229
<h3 id="app-properties">App Properties</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   230
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   231
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   232
The following properties are meaningful to App classes and subclasses. In addition to these, <a href="../view/index.html#view-properties">View's properties</a> are also applicable <code>Y.View</code> is part of App's composition.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   233
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   234
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   235
<table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   236
  <thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   237
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   238
      <th>Property</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   239
      <th>Default Value</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   240
      <th>Description</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   241
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   242
  </thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   243
  <tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   244
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   245
      <td><code>views</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   246
      <td><code>{}</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   247
      <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   248
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   249
        Hash of view-name to metadata used to declaratively describe an application's views and their relationship with the app and its other views. See <a href="#declaring-views">Declaring Views</a> for more details.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   250
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   251
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   252
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   253
        The view metadata is composed of Objects keyed to a view-name that can have any or all of the following properties:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   254
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   255
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   256
        <dl style="margin-top:1em">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   257
          <dt><code>type</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   258
          <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   259
            <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   260
            Function or a string representing the view constructor to use to create view instances. If a string is used, the constructor function is assumed to be on the <code>Y</code> object; e.g. <code>&quot;SomeView&quot;</code> -> <code>Y.SomeView</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   261
            </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   262
          </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   263
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   264
          <dt><code>preserve</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   265
          <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   266
            <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   267
            Boolean for whether the view instance should be retained. By default, the view instance will be destroyed when it is no longer the <code>activeView</code>. If <code>true</code> the view instance will simply be <code>removed()</code> from the DOM when it is no longer active. This is useful when the view is frequently used and may be expensive to re-create. See <a href="#preserved-views">Preserved Views</a> for best practices.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   268
            </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   269
          </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   270
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   271
          <dt><code>parent</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   272
          <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   273
            <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   274
            String to another named view in this hash that represents the parent view within the application's view hierarchy; e.g. a <code>&quot;photo&quot;</code> view could have <code>&quot;album&quot;</code> as its <code>parent</code> view. This parent/child relationship is a useful cue for things like transitions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   275
            </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   276
          </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   277
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   278
          <dt><code>instance</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   279
          <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   280
            <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   281
            Used internally to manage the current instance of this named view. This can be used if your view instance is created up-front, or if you would rather manage the View lifecycle, but you probably should just let this be handled for you.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   282
            </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   283
          </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   284
        </dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   285
      </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   286
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   287
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   288
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   289
      <td><code>transitions</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   290
      <td><code>{}</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   291
      <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   292
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   293
        Default transitions to use when the <code>activeView</code> changes. See the <a href="#switching-the-active-view">Switching the Active View</a> and <code><a href="#yapptransitions">Y.App.Transitions</a></code> sections for more details.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   294
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   295
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   296
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   297
        The following are types of changes for which transitions can be defined that correspond to the relationship between the new and old <code>activeView</code>:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   298
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   299
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   300
        <dl style="margin-top:1em">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   301
          <dt><code>navigate</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   302
          <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   303
            <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   304
            The default transition to use when changing the <code>activeView</code> of the application. This will be <strong><code>&quot;fade&quot;</code></strong> by default.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   305
            </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   306
          </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   307
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   308
          <dt><code>toChild</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   309
          <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   310
            <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   311
            The transition to use when the new <code>activeView</code> is configured as a child of the previously active view via its <code>parent</code> property as defined in this app's <code>views</code>. This will be <strong><code>&quot;slideLeft&quot;</code></strong> by default.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   312
            </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   313
          </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   314
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   315
          <dt><code>toParent</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   316
          <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   317
            <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   318
            The transition to use when the new <code>activeView</code> is configured as the <code>parent</code> of the previously active view as defined in this app's <code>views</code>. This will be <strong><code>&quot;slideRight&quot;</code></strong> by default.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   319
            </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   320
          </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   321
        </dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   322
      </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   323
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   324
  </tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   325
</table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   326
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   327
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   328
The App class uses both properties and attributes. Properties are best when their stored data might be useful to multiple App instances, whereas attributes are best when the data being stored only pertains to a single instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   329
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   330
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   331
<h3 id="app-attributes">App Attributes</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   332
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   333
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   334
App is composed of <a href="../view/index.html#view-attributes">View</a>, <a href="../router/index.html#config-attributes">Router</a>, and <a href="../pjax/index.html#config-attributes">Pjax</a>, all of which provide attributes that will be of interest to you — beyond these, App adds the following attributes:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   335
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   336
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   337
<table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   338
  <thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   339
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   340
      <th>Attribute</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   341
      <th>Default Value</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   342
      <th>Description</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   343
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   344
  </thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   345
  <tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   346
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   347
      <td><code>activeView</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   348
      <td><code>null</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   349
      <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   350
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   351
        The application's active/visible view. This attribute is read-only, to set the <code>activeView</code> use the <code>showView()</code> method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   352
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   353
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   354
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   355
        See <a href="#switching-the-active-view">Switching the Active View</a> for more details.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   356
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   357
      </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   358
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   359
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   360
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   361
      <td><code>serverRouting</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   362
      <td><code>undefined</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   363
      <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   364
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   365
        Whether or not this application's server is capable of properly routing all requests and rendering the initial state in the HTML responses.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   366
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   367
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   368
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   369
        This can have three different values, each having particular implications on how the app will handle routing and navigation:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   370
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   371
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   372
        <dl style="margin-top:1em">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   373
          <dt><code>undefined</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   374
          <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   375
            <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   376
            The best form of URLs will be chosen based on the capabilities of the browser. Given no information about the server environment, a balanced approach to routing and navigation is chosen. See <a href="#urls-based-on-browser-capabilities">URLs Based on Browser Capabilities</a> for more details.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   377
            </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   378
          </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   379
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   380
          <dt><code>true</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   381
          <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   382
            <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   383
            The server is <em>fully</em> capable of properly handling requests to all full-path URLs the app can produce.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   384
            </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   385
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   386
            <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   387
            This is the best option for progressive-enhancement because it will cause <strong>all URLs to always have full-paths</strong>, which means the server will be able to accurately handle all URLs this app produces. See <a href="#full-path-urls-only">Full-path URLs Only</a> and <a href="#progressively-enhanced-vs-client-only-apps">Progressively-enhanced vs. Client-only Apps</a> for more details.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   388
            </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   389
          </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   390
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   391
          <dt><code>false</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   392
          <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   393
            <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   394
            The server is <em>not</em> capable of properly handling requests to all full-path URLs the app can produce, therefore <em>all</em> routing will be handled by this App instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   395
            </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   396
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   397
            <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   398
            Be aware that this will cause <strong>all URLs to always be hash-based</strong>, even in browsers that are capable of using HTML5 history. Please make sure you fully understand the implications of client-only apps. See <a href="#hash-based-urls-only">Hash-based URLs Only</a> and <a href="#progressively-enhanced-vs-client-only-apps">Progressively-enhanced vs. Client-only Apps</a> for more details.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   399
            </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   400
          </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   401
        </dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   402
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   403
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   404
        See <a href="#routing-coordination-with-server">Routing Coordination with Server</a> for more details.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   405
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   406
      </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   407
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   408
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   409
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   410
      <td><code>transitions</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   411
      <td><code>false</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   412
      <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   413
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   414
        Whether or not this application should use view transitions, and if so then which ones or <code>true</code> for the defaults which are specified by the <code>transitions</code> prototype property.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   415
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   416
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   417
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   418
        <strong>Note:</strong> Transitions are an opt-in feature and will only be used in browsers which support native CSS3 transitions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   419
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   420
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   421
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   422
        See the <a href="#switching-the-active-view">Switching the Active View</a> and <code><a href="#yapptransitions">Y.App.Transitions</a></code> sections for more details.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   423
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   424
      </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   425
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   426
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   427
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   428
      <td><code>viewContainer</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   429
      <td><code>&lt;div&gt;</code> Node</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   430
      <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   431
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   432
        The node into which this app's <code>views</code> will be rendered when they become the <code>activeView</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   433
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   434
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   435
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   436
        The view container node serves as the container to hold the app's <code>activeView</code>. Each time the <code>activeView</code> is set via <code>showView()</code>, the previous view will be removed from this node, and the new active view's <code>container</code> node will be appended.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   437
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   438
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   439
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   440
        The default view container is a <code>&lt;div&gt;</code> Node, but you can override this in a subclass, or by passing in a custom <code>viewContainer</code> config value at instantiation time. The <code>viewContainer</code> may be provided as a selector string, DOM element, or a <code>Y.Node</code> instance (having the <code>viewContainer</code> and the <code>container</code> be the same node is also supported).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   441
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   442
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   443
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   444
        The app's <code>render()</code> method will stamp the view container with the CSS class <code>&quot;yui3-app-views&quot;</code> and append it to the app's <code>container</code> node if it isn't already, and any <code>activeView</code> will be appended to this node if it isn't already.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   445
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   446
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   447
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   448
        See <a href="#rendering-an-app">Rendering an App</a> for more details.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   449
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   450
      </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   451
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   452
  </tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   453
</table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   454
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   455
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   456
A few of App's inherited attributes are given new default values:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   457
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   458
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   459
<table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   460
  <thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   461
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   462
      <th>Attribute</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   463
      <th>Inherited From</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   464
      <th>New Default Value</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   465
      <th>Reason</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   466
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   467
  </thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   468
  <tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   469
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   470
      <td><code>container</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   471
      <td><code>Y.View</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   472
      <td><code>&lt;body&gt;</code> Node</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   473
      <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   474
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   475
        Apps are considered to be full-page by default.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   476
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   477
      </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   478
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   479
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   480
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   481
      <td><code>html5</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   482
      <td><code>Y.Router</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   483
      <td>auto</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   484
      <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   485
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   486
        This value is dependent on the value of <code>serverRouting</code> and will default accordingly.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   487
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   488
      </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   489
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   490
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   491
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   492
      <td><code>linkSelector</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   493
      <td><code>Y.PjaxBase</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   494
      <td><code>&quot;a&quot;</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   495
      <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   496
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   497
        By default this selector should match <em>all</em> links on the page because full-page apps are the default.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   498
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   499
      </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   500
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   501
  </tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   502
</table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   503
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   504
<h3 id="routing-coordination-with-server">Routing Coordination with Server</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   505
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   506
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   507
A primary feature of App is its powerful routing which enables you to enhance the user experience and performance of traditional client/server apps. Using <code>Y.App</code> you can create more meaningful and richer interactions for a user navigating through your application. App's routing features center on progressive enhancement and do <em>not</em> compromise standard browser features (back/forward button support), URLs, or search engine craw-ability.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   508
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   509
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   510
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   511
There are two attributes which are used to configure an app's URLs and how its routing should coordinate with the server:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   512
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   513
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   514
<dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   515
  <dt><code>root</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   516
  <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   517
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   518
    An app's <code>root</code> is the absolute path from which all routes should be evaluated, i.e. the path at which the app is mounted, usually "/".
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   519
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   520
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   521
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   522
    See <a href="../router/index.html#setting-the-root-path">Setting the Root Path</a> in Router's user guide for more information.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   523
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   524
  </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   526
  <dt><code>serverRouting</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   527
  <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   528
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   529
    Models a higher level concept over the capabilities of, and interactions between the browser and server with respect to URLs and inter-page navigation. This attribute determines how your <code>Y.App</code> instance will interact with the server: set this to <code>true</code> if the app can be progressively enhanced, or <code>false</code> if it's a client side-only app.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   530
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   531
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   532
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   533
    <strong>Note:</strong> The value of an app's <code>html5</code> attribute depends on the value of its <code>serverRouting</code> attribute. When <code>serverRouting</code> is explicit set to <code>false</code> (not just falsy), the default value for <code>html5</code> will be set to <code>false</code> for <em>all</em> browsers. When <code>serverRouting</code> is <code>true</code> or <code>undefined</code> the returned value will be dependent on the browser's capability of using HTML5 history.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   534
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   535
  </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   536
</dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   537
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   538
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   539
<strong>Looking for general information about routing?</strong> See the <a href="../router/index.html#routing">Routing</a> section in Router's user guide.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   540
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   541
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   542
<h4 id="urls-based-on-browser-capabilities">URLs Based on Browser Capabilities</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   543
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   544
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   545
This is the <strong>default</strong> behavior of how an app's routing will coordinate with the server. When <code>serverRouting</code> is left <code>undefined</code>, the app is given no information about the server's capabilities. In this case a balanced approach to URLs, routing, and navigation will be used:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   546
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   547
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   548
<ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   549
  <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   550
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   551
    Full-path URLs will only be used if the browser is capable of using HTML5 history, otherwise hash-based URLs will be used.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   552
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   553
  </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   554
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   555
  <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   556
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   557
    The <code>Y.App</code> instance will handle <em>all</em> routing since it is unknown whether the server is capable of properly routing requests.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   558
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   559
  </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   560
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   561
  <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   562
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   563
    The server is <em>required</em> to handle full-path URLs which will be generated by browsers which use the HTML5 <code>pushState()</code> history API. A server can handle these requests by either rendering the initial state in the HTML, or redirecting to a hash-based URL and letting the app dispatch to its route handlers.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   564
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   565
  </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   566
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   567
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   568
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   569
This behavior has been chosen as the default because it provides the best path forward for a developer to upgrade a client side-only app to a progressively enhanced app (but you should always prefer to build an app using progressive enhancement from the start, that's the whole point).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   570
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   571
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   572
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   573
The following is a simple <a href="http://nodejs.org/">Node.js</a> <a href="http://expressjs.com/">Express</a> server and very basic <code>Y.App</code> instance which demonstrate how the client and server can coordinate routing and the fulfillment of a request when using URLs that conform to the capabilities of the browser, but the server is "dumb":
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   574
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   575
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   576
<h5 class="no-toc">server.js - The Node.js Express server</h5>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   577
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   578
<pre class="code prettyprint">var express = require(&#x27;express&#x27;),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   579
    server  = express();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   580
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   581
&#x2F;&#x2F; Handles requests to the root path (&quot;&#x2F;&quot;) by simply sending the &quot;shell&quot; page
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   582
&#x2F;&#x2F; which creates the &#x60;Y.App&#x60; instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   583
server.get(&#x27;&#x2F;&#x27;, function (req, res) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   584
    res.sendfile(&#x27;index.html&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   585
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   586
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   587
&#x2F;&#x2F; Handles all other requests by redirecting the browser back to the root path
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   588
&#x2F;&#x2F; and tacking on URL&#x27;s path as the fragment; e.g. &quot;&#x2F;foo&#x2F;&quot; =&gt; &quot;&#x2F;#&#x2F;foo&#x2F;&quot;.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   589
server.get(&#x27;*&#x27;, function (req, res) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   590
    res.redirect(&#x27;&#x2F;#&#x27; + req.url);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   591
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   592
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   593
server.listen(process.env.PORT || 3000);</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   594
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   595
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   596
<h5 class="no-toc"><code>index.html</code> - The "shell" page for the <code>Y.App</code> instance</h5>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   597
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   598
<pre class="code prettyprint">&lt;!DOCTYPE html&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   599
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   600
&lt;html&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   601
&lt;head&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   602
    &lt;meta charset=&quot;utf-8&quot; &#x2F;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   603
    &lt;title&gt;Example App&lt;&#x2F;title&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   604
&lt;&#x2F;head&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   605
&lt;body&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   606
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   607
    &lt;h1&gt;&lt;&#x2F;h1&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   608
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   609
    &lt;script src=&quot;http:&#x2F;&#x2F;yui.yahooapis.com&#x2F;3.10.3&#x2F;build&#x2F;yui&#x2F;yui-min.js&quot;&gt;&lt;&#x2F;script&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   610
    &lt;script&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   611
    YUI().use(&#x27;app-base&#x27;, function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   612
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   613
        var app = new Y.App({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   614
            &#x2F;&#x2F; Configure the app.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   615
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   616
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   617
        &#x2F;&#x2F; Handles requests for the root by updating the page heading.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   618
        app.route(&#x27;&#x2F;&#x27;, function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   619
            Y.one(&#x27;h1&#x27;).set(&#x27;text&#x27;, &#x27;Example App - Home&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   620
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   621
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   622
        &#x2F;&#x2F; Handles all other requests by updating the page heading and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   623
        &#x2F;&#x2F; displaying current path in it.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   624
        app.route(&#x27;*&#x27;, function (req) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   625
            Y.one(&#x27;h1&#x27;).set(&#x27;text&#x27;, &#x27;Example App - &#x27; + req.path);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   626
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   627
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   628
        &#x2F;&#x2F; Make sure to dispatch the current hash-based URL which was set by
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   629
        &#x2F;&#x2F; the server to our route handlers.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   630
        app.render().dispatch();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   631
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   632
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   633
    &lt;&#x2F;script&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   634
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   635
&lt;&#x2F;body&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   636
&lt;&#x2F;html&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   637
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   638
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   639
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   640
In the above example, the server handles full URLs by sending a redirect back to the root ("/") with a hash-based path and serves a "shell" HTML page to delegate control to a <code>Y.App</code> instance. Once the app is loaded, it will dispatch the hash-based path to its route handlers, finishing the fulfillment of the request on the client.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   641
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   642
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   643
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   644
You could also implement the server-side redirection logic using an Apache Mod Rewrite <code>.htaccess</code> file:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   645
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   646
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   647
<pre class="code">RewriteEngine On
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   648
RewriteRule ^(.+)$ &#x2F;#&#x2F;$1 [NE,L]</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   649
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   650
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   651
<h4 id="full-path-urls-only">Full-path URLs Only</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   652
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   653
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   654
Full-path URLs are standard URLs which have matching routes based on the URL's path segments. The follow are example full-path URLs you might expect to see in a photos application:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   655
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   656
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   657
<pre class="code">http:&#x2F;&#x2F;example.com&#x2F;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   658
http:&#x2F;&#x2F;example.com&#x2F;photos&#x2F;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   659
http:&#x2F;&#x2F;example.com&#x2F;photos&#x2F;1
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   660
http:&#x2F;&#x2F;example.com&#x2F;photos&#x2F;2
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   661
http:&#x2F;&#x2F;example.com&#x2F;albums&#x2F;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   662
http:&#x2F;&#x2F;example.com&#x2F;albums&#x2F;vacation</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   663
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   664
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   665
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   666
Setting an app's <code>serverRouting</code> attribute to <code>true</code> signals that the server <em>is</em> capable of properly handling requests to all full-path URLs the app can produce. This causes the app to <em>always</em> use full-path URLs, regardless of whether the browser can use HTML5 history or not. In this case the capabilities of the client and server are coordinated in the most optimal way, giving the app the following qualities:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   667
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   668
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   669
<ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   670
  <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   671
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   672
    Full-path URLs are <em>always</em> used, older browsers which can not use HTML5 history will have to do full page loads.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   673
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   674
  </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   675
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   676
  <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   677
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   678
    The <code>Y.App</code> instance will only handle routing in browser which support HTML5 history, the other browser's "requests" will be handled completely by the server.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   679
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   680
  </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   681
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   682
  <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   683
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   684
    The server is <em>required</em> to handle full-path URLs which will be generated by the app. Ideally the server should render the application's initial state in the response HTML for the given URL.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   685
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   686
  </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   687
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   688
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   689
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   690
This is the <strong>best option for progressive enhancement</strong>! All users of your app will have the same, full-path URLs, independent of the browser or device they are using. Configuring your app with <code>serverRouting</code> set to <code>true</code> means that the client and server components of your application are working together to provide the best overall experience for your users.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   691
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   692
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   693
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   694
See <a href="#progressively-enhanced-vs-client-only-apps">Progressively-enhanced vs. Client-only Apps</a> for more information about best practices.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   695
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   696
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   697
<h4 id="hash-based-urls-only">Hash-based URLs Only</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   698
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   699
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   700
Hash-based URLs have matching routes based on the URL's fragment identifier ("#"). The follow are example hash-based URLs you might expect to see in a photos application:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   701
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   702
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   703
<pre class="code">http:&#x2F;&#x2F;example.com&#x2F;#&#x2F;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   704
http:&#x2F;&#x2F;example.com&#x2F;#&#x2F;photos&#x2F;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   705
http:&#x2F;&#x2F;example.com&#x2F;#&#x2F;photos&#x2F;1
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   706
http:&#x2F;&#x2F;example.com&#x2F;#&#x2F;photos&#x2F;2
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   707
http:&#x2F;&#x2F;example.com&#x2F;#&#x2F;albums&#x2F;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   708
http:&#x2F;&#x2F;example.com&#x2F;#&#x2F;albums&#x2F;vacation</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   709
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   710
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   711
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   712
Notice how the above URLs actually all contain the same path segment ("/"), but use the fragment identifier ("#") to hold a pseudo-path value.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   713
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   714
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   715
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   716
Setting an app's <code>serverRouting</code> attribute to <code>false</code> signals that the server is <em>not</em> capable of properly handling requests to full-path URLs. This causes the app to <em>always</em> use hash-based URLs, regardless of the browser's capabilities. In this case the app will assume that there is no server to rely on, giving the app the following qualities:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   717
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   718
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   719
<ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   720
  <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   721
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   722
    Be aware that <strong>all URLs will be hash-based</strong>, even in browsers which are capable of using HTML5 history.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   723
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   724
  </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   725
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   726
  <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   727
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   728
    The <code>Y.App</code> instance will handle all routing since there is no server capable of properly routing handling requests.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   729
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   730
  </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   731
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   732
  <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   733
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   734
    The server is only expected to serve out a static HTML "shell" page with the required JavaScript to instantiate the <code>Y.App</code> instance, which will then render the initial state of the application.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   735
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   736
  </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   737
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   738
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   739
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   740
This is the best option if there is no guarantee that your app will be served by a capable server. This allows an app to run when hosted on the filesystem or static file server. You should be aware that using hash-based URLs means there will be information loss. The server will <em>not</em> receive the full URL because browsers do not send the fragment-part to the server, that is everything after and including the "#".
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   741
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   742
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   743
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   744
<strong>Please read</strong> <a href="#progressively-enhanced-vs-client-only-apps">Progressively-enhanced vs. Client-only Apps</a> for more information and best practices.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   745
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   746
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   747
<h3 id="rendering-an-app">Rendering an App</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   748
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   749
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   750
App inherits both its <code>container</code> attribute and <code>render()</code> method from View. Unlike <a href="../view/index.html#rendering-a-view">View's empty <code>render()</code> implementation</a>, App provides a default implementation which appends the <code>activeView</code> (if there is one) to the <code>viewContainer</code> node which itself is appended to the <code>container</code> node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   751
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   752
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   753
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   754
The basic usage of your app's <code>render()</code> method is to call it at least once, usually after you instantiate your app, this ensures the proper DOM structure is setup to handle rendering the app's <a href="#view-management">views</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   755
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   756
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   757
<pre class="code prettyprint">var app = new Y.App();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   758
app.render();</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   759
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   760
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   761
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   762
This results in the HTML of the page looking like this:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   763
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   764
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   765
<pre class="code prettyprint">&lt;body class=&quot;yui3-app&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   766
    ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   767
    &lt;div class=&quot;yui3-app-views&quot;&gt;&lt;&#x2F;div&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   768
&lt;&#x2F;body&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   769
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   770
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   771
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   772
By default, an app's <code>container</code> node will be the <code>&lt;body&gt;</code> element and its <code>viewContainer</code> node will be a new <code>&lt;div&gt;</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   773
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   774
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   775
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   776
<strong>Note:</strong> The <code>&quot;yui3-app&quot;</code> and <code>&quot;yui3-app-views&quot;</code> CSS classes are added to the <code>container</code> and <code>viewContainer</code> respectively — this happens when the app is rendered.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   777
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   778
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   779
<h4 id="specifying-container-nodes">Specifying Container Nodes</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   780
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   781
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   782
When constructing a new App instance you can specify values for the app's <code>container</code> and <code>viewContainer</code> attributes, and they can even reference the same node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   783
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   784
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   785
<pre class="code prettyprint">var app = new Y.App({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   786
    container    : &#x27;#wrapper&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   787
    viewContainer: &#x27;#wrapper&#x27;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   788
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   789
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   790
app.render();</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   791
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   792
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   793
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   794
Assuming that a <code>&lt;div id=&quot;wrapper&quot;&gt;</code> node already exists on the page, this uses a CSS selector string to reference the node, assigns it to both containers, and results in the following HTML:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   795
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   796
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   797
<pre class="code prettyprint">&lt;div id=&quot;wrapper&quot; class=&quot;yui3-app yui3-app-views&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   798
    ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   799
&lt;&#x2F;div&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   800
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   801
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   802
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   803
If you specify a <code>container</code> that is not already within the markup of the page, you'll need to manually append it to an element that is:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   804
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   805
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   806
<pre class="code prettyprint">var app = new Y.App({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   807
    container: Y.Node.create(&#x27;&lt;div id=&quot;fancy-app&quot; &#x2F;&gt;&#x27;)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   808
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   809
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   810
app.render().get(&#x27;container&#x27;).appendTo(&#x27;body&#x27;);</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   811
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   812
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   813
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   814
This results in the HTML of the page looking like this:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   815
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   816
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   817
<pre class="code prettyprint">&lt;body&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   818
    ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   819
    &lt;div id=&quot;fancy-app&quot; class=&quot;yui3-app&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   820
        &lt;div class=&quot;yui3-app-views&quot;&gt;&lt;&#x2F;div&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   821
    &lt;&#x2F;div&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   822
&lt;&#x2F;body&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   823
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   824
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   825
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   826
Refer to App's API Docs for more details about <a href="http://yuilibrary.com/yui/docs/api/classes/App.html#attr_container"><code>container</code></a> and <a href="http://yuilibrary.com/yui/docs/api/classes/App.html#attr_viewContainer"><code>viewContainer</code></a> attributes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   827
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   828
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   829
<h4 id="overriding-render">Overriding <code>render()</code></h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   830
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   831
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   832
You may override the <code>render()</code> method to customize how the app renders itself, particularly if you are creating an App subclass.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   833
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   834
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   835
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   836
<strong>Note:</strong> You should expect that the <code>viewContainer</code>'s contents will be modified by the app for the purpose of rendering the <code>activeView</code> when it changes; and ideally your <code>render()</code> method should also return <code>this</code> at the end to allow chaining, but that's up to you.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   837
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   838
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   839
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   840
The following provides a templates for how you could subclass <code>Y.App</code> and implement a custom <code>render()</code> method while still preserving its default behavior:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   841
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   842
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   843
<pre class="code prettyprint">Y.CustomApp = Y.Base.create(&#x27;customApp&#x27;, Y.App, [], {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   844
    render: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   845
        &#x2F;&#x2F; This calls the superclass&#x27; (Y.App) implementation of the &#x60;render()&#x60;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   846
        &#x2F;&#x2F; method to preserve the default behavior.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   847
        Y.CustomApp.superclass.render.apply(this, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   848
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   849
        &#x2F;&#x2F; Provide your custom rendering logic here.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   850
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   851
        &#x2F;&#x2F; Returns this &#x60;Y.CustomApp&#x60; instance to allow for chaining.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   852
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   853
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   854
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   855
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   856
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   857
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   858
Refer to App's API Docs for more details about the <a href="http://yuilibrary.com/yui/docs/api/classes/App.html#method_render"><code>render()</code> method</a>. See <a href="#subclassing">Subclassing</a> for more details on extending <code>Y.App</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   859
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   860
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   861
<h3 id="view-management">View Management</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   862
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   863
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   864
A primary feature of App is its flexible view management, which enables you to declare the primary views of your application and easily switch which one is active. This is very handy for defining your app's top-level "page" views, then switching between them as a user navigates through the application.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   865
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   866
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   867
<h4 id="declaring-views">Declaring Views</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   868
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   869
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   870
The <code>views</code> property of an App class allows you to specify a mapping of view-names to view-metadata that should be registered to your app. This way you can specify information about your app's views — how they should be treated by the app, and how they relate to other views — up-front, in a declarative way that is self-documenting.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   871
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   872
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   873
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   874
You can setup this views mapping on both App subclasses and instances. Every App instance will receive its own copy of a <code>views</code> object, any <code>views</code> metadata defined at the class-level will be used as defaults and merged with any <code>views</code> specified during instantiation time.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   875
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   876
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   877
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   878
The following example shows the creation of an App subclass, <code>CustomApp</code>, which has a few default views defined, and an instance of <code>CustomApp</code> which defines another view and overrides some of the defaults.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   879
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   880
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   881
<pre class="code prettyprint">&#x2F;&#x2F; Create a Y.CustomApp class that extends Y.App.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   882
Y.CustomApp = Y.Base.create(&#x27;customApp&#x27;, Y.App, [], {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   883
    &#x2F;&#x2F; Default registered views inherited by all CustomApp instances.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   884
    views: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   885
        home : {preserve: true},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   886
        users: {preserve: true},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   887
        user : {parent: &#x27;users&#x27;}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   888
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   889
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   890
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   891
&#x2F;&#x2F; Create a CustomApp instance that inherits the defaults and adds to them.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   892
var app = new Y.CustomApp({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   893
    &#x2F;&#x2F; Additional view metadata to be merged with the defaults.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   894
    views: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   895
        home : {preserve: false},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   896
        user : {preserve: false},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   897
        about: {preserve: true}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   898
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   899
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   900
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   901
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   902
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   903
Using the <code>getViewInfo()</code> method, we can see how the <code>views</code> metadata from our <code>CustomView</code> class and instance were merged together.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   904
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   905
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   906
<pre class="code prettyprint">&#x2F;&#x2F; Overwrote &quot;home&quot;&#x27;s default &#x60;preserve&#x60; value.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   907
Y.log(app.getViewInfo(&#x27;home&#x27;).preserve);  &#x2F;&#x2F; =&gt; false
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   908
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   909
&#x2F;&#x2F; Added &#x60;preserve&#x60; to &quot;user&quot; view,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   910
&#x2F;&#x2F; and this did not overwrite the default &#x60;parent&#x60; value.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   911
Y.log(app.getViewInfo(&#x27;user&#x27;).parent);    &#x2F;&#x2F; =&gt; &quot;home&quot;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   912
Y.log(app.getViewInfo(&#x27;user&#x27;).preserve);  &#x2F;&#x2F; =&gt; false
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   913
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   914
&#x2F;&#x2F; The specified &quot;about&quot; view was registered.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   915
Y.log(app.getViewInfo(&#x27;about&#x27;).preserve); &#x2F;&#x2F; =&gt; true</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   916
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   917
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   918
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   919
See the <a href="#app-properties">App Properties</a> section above for more details on what metadata can be stored for each view in <code>views</code> mapping.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   920
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   921
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   922
<h4 id="switching-the-active-view">Switching the Active View</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   923
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   924
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   925
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   926
When decomposing an application into discrete user-interfaces, it is natural to think of these as different "pages"—with each one serving a particular role and being the main content on the screen. With the App component, changing the main content/user-interface is done by updating an app's <code>activeView</code> attribute via the <code>showView()</code> method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   927
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   928
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   929
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   930
Working in concert with an app's registered <code>views</code>, the <code>showView()</code> method will take a specified view and make it the app's <code>activeView</code>. This view will be "attached" to the app by rendering it inside the app's <code>viewContainer</code> and any custom events fired by the view will bubble to the app. Any previously active view will be "detached" from the app, removed from the DOM, and either preserved for later use or properly destroyed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   931
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   932
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   933
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   934
The following example is the most basic "Hello World" app:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   935
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   936
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   937
<pre class="code prettyprint">&#x2F;&#x2F; Creates a new App and View instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   938
var app  = new Y.App(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   939
    view = new Y.View();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   940
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   941
&#x2F;&#x2F; Overrides the view&#x27;s &#x60;render()&#x60; method to render text into its &#x60;container&#x60;.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   942
view.render = function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   943
    this.get(&#x27;container&#x27;).set(&#x27;text&#x27;, &#x27;Hello World!&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   944
    return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   945
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   946
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   947
&#x2F;&#x2F; Renders the &#x60;app&#x60; and &#x60;view&#x60;, then sets the view as the app&#x27;s &#x60;activeView&#x60;.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   948
&#x2F;&#x2F; We have to explicity tell the app to render the view because by default, if
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   949
&#x2F;&#x2F; the view instance already exists it won&#x27;t be rendered automatically.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   950
app.render().showView(view, null, {render: true});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   951
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   952
&#x2F;&#x2F; Verify that &#x60;view&#x60; is now the &#x60;activeView&#x60;, and that the view&#x27;s &#x60;container&#x60;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   953
&#x2F;&#x2F; is now rendered within the app&#x27;s &#x60;viewContainer&#x60;.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   954
Y.log(app.get(&#x27;activeView&#x27;) === view);                           &#x2F;&#x2F; =&gt; true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   955
Y.log(app.get(&#x27;viewContainer&#x27;).contains(view.get(&#x27;container&#x27;))); &#x2F;&#x2F; =&gt; true</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   956
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   957
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   958
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   959
This results in the HTML of the page looking like this:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   960
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   961
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   962
<pre class="code prettyprint">&lt;body class=&quot;yui3-app&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   963
    ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   964
    &lt;div class=&quot;yui3-app-views&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   965
        &lt;div&gt;Hello World!&lt;&#x2F;div&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   966
    &lt;&#x2F;div&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   967
&lt;&#x2F;body&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   968
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   969
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   970
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   971
This example app can <em>easily</em> become dynamic and have the ability to say hello to someone by name. By creating a reusable <code>HelloView</code> class the app can dynamically switch between outputting "Hello World!" and "Hello [name]!" where the "name" is a path segment in the URL.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   972
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   973
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   974
<pre class="code prettyprint">&#x2F;&#x2F; Creates a HelloView which can say hello to someone named, or to the World
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   975
&#x2F;&#x2F; if a name is not specified.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   976
Y.HelloView = Y.Base.create(&#x27;helloView&#x27;, Y.View, [], {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   977
    render: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   978
        var name = this.get(&#x27;name&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   979
        this.get(&#x27;container&#x27;).set(&#x27;text&#x27;, &#x27;Hello &#x27; + (name || &#x27;World&#x27;) + &#x27;!&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   980
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   981
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   982
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   983
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   984
&#x2F;&#x2F; Creates a new App instance and registers the HelloView.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   985
var app = new Y.App({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   986
    views: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   987
        hello: {type: &#x27;HelloView&#x27;}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   988
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   989
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   990
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   991
&#x2F;&#x2F; Adds a route handler for &quot;&#x2F;&quot; to show the HelloView.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   992
app.route(&#x27;&#x2F;&#x27;, function (req) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   993
    &#x2F;&#x2F; Sets the &#x60;activeView&#x60; to a new instance of a &#x60;Y.HelloView&#x60; by just
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   994
    &#x2F;&#x2F; passing &quot;hello&quot;, the name of the registered view.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   995
    this.showView(&#x27;hello&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   996
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   997
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   998
&#x2F;&#x2F; Adds a route handler for &quot;&#x2F;:name&quot; to show the HelloView with a &#x60;name&#x60;.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   999
app.route(&#x27;&#x2F;:name&#x27;, function (req) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1000
    &#x2F;&#x2F; The name which we want to say hello to is specified on &#x60;req.params&#x60;.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1001
    var name = req.params.name;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1002
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1003
    &#x2F;&#x2F; Sets the &#x60;activeView&#x60; to a new instance of a &#x60;Y.HelloView&#x60;, but here
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1004
    &#x2F;&#x2F; we are also passing a config object which the new view instance will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1005
    &#x2F;&#x2F; be constructed with, and it contains the name which we&#x27;ll say hello to.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1006
    this.showView(&#x27;hello&#x27;, {name: name});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1007
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1008
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1009
&#x2F;&#x2F; Renders the app, then saves a new history entry for &quot;&#x2F;eric&quot; which will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1010
&#x2F;&#x2F; dispatch the &quot;&#x2F;:name&quot; route handler.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1011
app.render().save(&#x27;&#x2F;eric&#x27;);</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1012
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1013
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1014
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1015
This results in the URL being updated to either <code>&quot;&#x2F;eric&quot;</code> or <code>&quot;&#x2F;#&#x2F;eric&quot;</code> depending on whether the browser is capable of HTML5 history, and the HTML of the page looking like this:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1016
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1017
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1018
<pre class="code prettyprint">&lt;body class=&quot;yui3-app&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1019
    ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1020
    &lt;div class=&quot;yui3-app-views&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1021
        &lt;div&gt;Hello eric!&lt;&#x2F;div&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1022
    &lt;&#x2F;div&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1023
&lt;&#x2F;body&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1024
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1025
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1026
<h5 id="understanding-showview-options">Understanding <code>showView()</code> Options</h5>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1027
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1028
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1029
App's <code>showView()</code> method has the following signature:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1030
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1031
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1032
<pre class="code prettyprint">showView ( view  [config]  [options]  [callback] )</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1033
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1034
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1035
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1036
As seen in the previous usage examples, <code>view</code> can either be a view instance or the string-name of a view defined in the app's <code>views</code> object. The optional <code>config</code> object is used when creating a new view instance. The <code>config</code> object can also be used to update an existing or preserved <code>view</code>'s attributes when <code>options.update</code> is <code>true</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1037
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1038
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1039
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1040
The following is the list of <code>options</code> which affect how the app will switch its <code>activeView</code>:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1041
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1042
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1043
<dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1044
  <dt><code>callback</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1045
  <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1046
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1047
    Optional callback function to call after new <code>activeView</code> is ready to use, the function will be passed a reference to the view.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1048
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1049
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1050
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1051
    Specifying a callback function is useful if you need access to the view instance which is created as a result of calling <code>showView()</code>. Also, if an app is using transitions, the callback function will be called once the transitions have completed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1052
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1053
  </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1054
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1055
  <dt><code>prepend</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1056
  <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1057
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1058
    Whether the <code>view</code> should be prepended instead of appended to the app's <code>viewContainer</code> node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1059
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1060
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1061
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1062
    This option is used internally to aid transitions by prepending the new <code>activeView</code> if it has been defined as the <code>parent</code> of the currently active view. This puts the view as the first child of the app's <code>viewContainer</code> node which helps the sliding transitions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1063
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1064
  </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1065
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1066
  <dt><code>render</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1067
  <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1068
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1069
    Whether the <code>view</code> should be rendered. <strong>Note:</strong> If no value is specified, a view instance will only be rendered if it's newly created by this method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1070
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1071
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1072
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1073
    Sometimes you may need greater control over when a view is rendered. Under certain circumstances you may wish to re-render a preserved view, you can use this option to accomplish this.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1074
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1075
  </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1076
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1077
  <dt><code>transition</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1078
  <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1079
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1080
    Optional transition override. A transition can be specified which will override the default, or <code>false</code> for no transition.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1081
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1082
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1083
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1084
    When an app is using transitions, this option allows you to override the default transition that will occur per the app's <code>transitions</code> configuration — enabling finer-grained control over how views transition.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1085
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1086
  </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1087
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1088
  <dt><code>update</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1089
  <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1090
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1091
    Whether an existing view should have its attributes updated by passing the <code>config</code> object to its <code>setAttrs()</code> method. <strong>Note:</strong> This option does not have an effect if the <code>view</code> instance is created as a result of calling this method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1092
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1093
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1094
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1095
    This option would usually be used to update a preserved view with new data and can be used in conjunction with the <code>render</code> option to force a view to update and re-render.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1096
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1097
  </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1098
</dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1099
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1100
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1101
Refer to App's API docs</a> for more details about the <a href="http://yuilibrary.com/yui/docs/api/classes/App.html#method_showView"><code>showView()</code> method</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1102
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1103
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1104
<h4 id="server-rendered-views">Server Rendered Views</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1105
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1106
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1107
There are certain situations where an app needs to show a view which is not rendered in the browser, instead the content is rendered server side. The App component provides a few features for working with pre-rendered views:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1108
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1109
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1110
<dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1111
  <dt><code>showContent()</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1112
  <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1113
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1114
    Method which provides an easy way to view-ify HTML content which should be shown as an app's active/visible view.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1115
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1116
  </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1117
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1118
  <dt><code>loadContent()</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1119
  <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1120
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1121
    Route middleware which load content from a server. This makes an Ajax request for the requested URL, parses the returned content and puts it on the route's response object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1122
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1123
  </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1124
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1125
  <dt><code>Y.App.Content.route</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1126
  <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1127
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1128
    A stack of middleware which forms a pjax-style content route. This provides a standard convention which uses <code>loadContent()</code> and <code>showContent()</code> to load and show server rendered content as views for an app.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1129
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1130
  </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1131
</dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1132
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1133
<h5 id="progressively-enhanced-views">Progressively Enhanced Views</h5>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1134
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1135
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1136
When a person first accesses an app, the initial rendering of the UI might be done by the server; in this situation, when the app "boots up" in the browser, the <code>showContent()</code> method can be used to view-ify this pre-rendered content and make it the app's <code>activeView</code>. Using the server to render the initial state of the app in the HTML it sends to the browser is a general best practice. See <a href="#progressively-enhanced-vs-client-only-apps">Progressively-enhanced vs. Client-only Apps</a> for more details.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1137
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1138
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1139
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1140
The following is a basic example of using <code>showContent()</code> during the initialization of an app:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1141
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1142
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1143
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1144
Assume the page contains the following HTML:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1145
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1146
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1147
<pre class="code prettyprint lang-html">...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1148
&lt;body&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1149
    &lt;div id=&quot;wrapper&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1150
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1151
        &lt;div class=&quot;view&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1152
            &lt;h1&gt;Some Page&lt;&#x2F;h1&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1153
            &lt;p&gt;With some content.&lt;&#x2F;p&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1154
        &lt;&#x2F;div&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1155
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1156
    &lt;&#x2F;div&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1157
&lt;&#x2F;body&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1158
...</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1159
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1160
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1161
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1162
The <code>Y.App</code> instance can be setup to use this initial content as its <code>activeView</code>:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1163
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1164
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1165
<pre class="code prettyprint lang-javascript">var app = new Y.App();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1166
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1167
&#x2F;&#x2F; Renders the app and shows the content which matches the specified selector.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1168
app.render().showContent(&#x27;#wrapper &gt; .view&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1169
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1170
Y.log(Y.one(&#x27;#wrapper &gt; .view&#x27;) === app.get(&#x27;activeView&#x27;).get(&#x27;container&#x27;));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1171
&#x2F;&#x2F; =&gt; true</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1172
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1173
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1174
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1175
When calling the <code>showContent()</code> method here, a new <code>Y.View</code> instance will be created and the <code>&lt;div class=&quot;view&quot;&gt;</code> node will be its <code>container</code>; and we can see this by checking the app's <code>activeView</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1176
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1177
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1178
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1179
The <code>showContent()</code> method becomes more powerful when it's called with <code>options</code>. The following is a list of options in addition to any <a href="#understanding-showview-options"><code>showView()</code> options</a>:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1180
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1181
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1182
<dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1183
  <dt><code>view</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1184
  <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1185
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1186
    The name of a view defined in this app's <code>views</code>, or an object with the following properties:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1187
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1188
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1189
    <dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1190
      <dt><code>name</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1191
      <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1192
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1193
        The name of a view defined in this app's <code>views</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1194
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1195
      </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1196
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1197
      <dt><code>config</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1198
      <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1199
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1200
        Optional configuration to use when creating the new view instance. This config object can also be used to update an existing or preserved view's attributes when <code>options.update</code> is <code>true</code>. <strong>Note:</strong> If a <code>container</code> is specified, it will be overridden by the content specified in the first argument of <code>showContent()</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1201
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1202
      </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1203
    </dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1204
  </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1205
</dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1206
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1207
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1208
Let's look at a more interesting example which specifies a <code>view</code> name registered with the app:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1209
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1210
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1211
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1212
Assume the page contains the following HTML:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1213
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1214
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1215
<pre class="code prettyprint lang-html">...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1216
&lt;body&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1217
    &lt;div id=&quot;wrapper&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1218
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1219
        &lt;div class=&quot;view&quot; data-view=&quot;foo&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1220
            &lt;h1&gt;Foo Page&lt;&#x2F;h1&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1221
            &lt;p&gt;With some content.&lt;&#x2F;p&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1222
            &lt;p&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1223
                &lt;button&gt;Close&lt;&#x2F;button&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1224
            &lt;&#x2F;p&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1225
        &lt;&#x2F;div&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1226
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1227
    &lt;&#x2F;div&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1228
&lt;&#x2F;body&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1229
...</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1230
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1231
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1232
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1233
This time, the <code>Y.App</code> instance will be setup to use a <code>Y.FooView</code> with the initial content as its <code>activeView</code>:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1234
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1235
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1236
<pre class="code prettyprint lang-javascript">Y.FooView = Y.Base.create(&#x27;foo&#x27;, Y.View, [], {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1237
    events: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1238
        &#x27;button&#x27;: {click: &#x27;handleButtonClick&#x27;}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1239
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1240
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1241
    handleButtonClick: function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1242
        alert(&#x27;You click the button, and alerts are annoying.&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1243
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1244
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1245
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1246
var app, content;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1247
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1248
app = new Y.App({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1249
    &#x2F;&#x2F; The example assumes there&#x27;s support for rendering on the server. That&#x27;s
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1250
    &#x2F;&#x2F; the whole point with progressive enhancement.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1251
    serverRouting: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1252
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1253
    views: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1254
        foo: {type: Y.FooView}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1255
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1256
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1257
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1258
content = Y.one(&#x27;#wrapper &gt; .view&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1259
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1260
&#x2F;&#x2F; Renders the app and shows the &#x60;content&#x60; node _and_ specifies which view
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1261
&#x2F;&#x2F; should be created.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1262
app.render().showContent(content, {view: content.getData(&#x27;view&#x27;)});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1263
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1264
Y.log(app.get(&#x27;activeView&#x27;) instanceof Y.FooView); &#x2F;&#x2F; =&gt; true</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1265
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1266
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1267
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1268
Refer to App's API Docs for more details about the <a href="http://yuilibrary.com/yui/docs/api/classes/App.html#method_showContent"><code>showContent()</code> method</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1269
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1270
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1271
<h5 id="loading-static-content">Loading Static Content</h5>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1272
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1273
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1274
Another common use of server rendered views is static content pages. While the interesting parts of an app are using models, views, and templates to render content dynamically in the browser, the app might also contain static content pages; e.g. "About Us". Instead of giving the client side of the app the smarts to render this type of static content, <code>Y.App.Content.route</code>—which is a stack of middleware that forms a pjax-style content route—can be used. This route uses a convention of loading HTML from the server via an XHR, and making that content the app's <code>activeView</code> by calling into the <code>showContent()</code> method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1275
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1276
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1277
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1278
The following example uses both the <code>Y.App.Content.route</code> for the <code>&quot;&#x2F;about&#x2F;&quot;</code> page, and the <code>loadContent()</code> middleware for the <code>&quot;&#x2F;about&#x2F;people&#x2F;&quot;</code>, allowing for more control over which view is used:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1279
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1280
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1281
<pre class="code prettyprint lang-javascript">Y.PeopleView = Y.Base.create(&#x27;people&#x27;, Y.View, [], {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1282
    events: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1283
        &#x27;.person&#x27;: {click: &#x27;showPersonOverlay&#x27;}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1284
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1285
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1286
    showPersonOverlay: function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1287
        &#x2F;&#x2F; Show an overlay with the all info about the person...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1288
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1289
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1290
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1291
var app = new Y.App({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1292
    views: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1293
        people: {type: Y.PeopleView}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1294
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1295
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1296
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1297
&#x2F;&#x2F; Uses the convenient content route to load the &quot;&#x2F;about&#x2F;&quot; pjax-style.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1298
app.route(&#x27;&#x2F;about&#x2F;&#x27;, Y.App.Content.route);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1299
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1300
&#x2F;&#x2F; Uses the &#x60;loadContent()&#x60; middleware to load the HTML from the server, but
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1301
&#x2F;&#x2F; specifies a custom route callback to control which view is created.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1302
app.route(&#x27;&#x2F;about&#x2F;people&#x2F;&#x27;, &#x27;loadContent&#x27;, function (req, res, next) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1303
    Y.config.doc.title = res.content.title;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1304
    this.showContent(res.content.node, {view: &#x27;people&#x27;});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1305
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1306
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1307
&#x2F;&#x2F; Render the app and dispatch to the route handlers.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1308
app.render().dispatch();</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1309
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1310
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1311
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1312
Refer to App's API Docs for more details about the <a href="http://yuilibrary.com/yui/docs/api/classes/App.html#method_loadContent"><code>loadContent()</code> middleware</a>, and the <a href="http://yuilibrary.com/yui/docs/api/classes/App.Content.html#property_route"><code>Y.App.Content.route</code> route</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1313
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1314
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1315
<h3 id="navigating-between-pages">Navigating Between "Pages"</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1316
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1317
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1318
A key feature of <code>Y.App</code> is its robust URL navigation management. You can simply use standard HTML links within your app and when the user clicks a link, <code>Y.App</code> will handle it if there’s a matching route for that URL. With the <a href="#configuring-navigation-behavior">navigation-related config options</a> you have full control over your app's navigation behavior and experience, plus your app will automatically use the best available navigation method based on these settings, the browser’s capabilities, and the actions of the user.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1319
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1320
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1321
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1322
This enables an app to fulfill a "page request" by using data it already has stored in models or loading new data, then composing and showing a view which represents the app's current state for this URL — all without requiring a full page load.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1323
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1324
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1325
<h4 id="programmatic-navigation">Programmatic navigation</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1326
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1327
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1328
Beyond handling navigation via link clicks, <code>Y.App</code> also exposes a programmatic way to navigate the user though your app via the <code>navigate()</code> method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1329
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1330
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1331
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1332
App's <code>navigate()</code> method implements a higher level concept of "browsing" over the <code>save()</code> and <code>replace()</code> methods. It will manage a user's navigation history like a browser, and is the recommended method to use when programmatically navigating the user to URLs within your app.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1333
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1334
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1335
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1336
The <code>navigate()</code> method will do the right thing (what the browser would do) when navigating the user to the same URL they are currently on — it will replace the history entry — or to an in-page fragment identifier — which only when configured will navigate. The following demonstrates some of these behaviors:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1337
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1338
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1339
<pre class="code prettyprint">var app = new Y.App();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1340
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1341
app.route(&#x27;*&#x27;, function (req, res, next) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1342
    &#x2F;&#x2F; Handle all URLs.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1343
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1344
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1345
&#x2F;&#x2F; Save a new history entry for &quot;&#x2F;&quot;, or replaces the current entry if we&#x27;re
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1346
&#x2F;&#x2F; already on &quot;&#x2F;&quot;.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1347
app.navigate(&#x27;&#x2F;&#x27;); &#x2F;&#x2F; =&gt; true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1348
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1349
&#x2F;&#x2F; Does not navigate even though there&#x27;s a matching route handler.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1350
app.navigate(&#x27;#top&#x27;); &#x2F;&#x2F; =&gt; false
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1351
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1352
&#x2F;&#x2F; Enable navigation on hash-only changes to the URL.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1353
app.set(&#x27;navigateOnHash&#x27;, true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1354
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1355
&#x2F;&#x2F; Does navigate because &#x60;navigateOnHash&#x60; was enabled.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1356
app.navigate(&#x27;#top&#x27;); &#x2F;&#x2F; =&gt; true</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1357
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1358
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1359
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1360
Refer to App's API Docs for more details about the <a href="http://yuilibrary.com/yui/docs/api/classes/App.html#method_navigate"><code>navigate()</code> method</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1361
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1362
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1363
<h4 id="configuring-navigation-behavior">Configuring Navigation Behavior</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1364
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1365
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1366
The navigation features of <code>Y.App</code> are built on the <a href="http://yuilibrary.com/yui/docs/api/classes/PjaxBase.html">base pjax functionality</a>. This is what enables users to navigate to the different sections or "pages" of an app while avoiding full page loads.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1367
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1368
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1369
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1370
The following are configuration attributes which define an app’s navigation behavior:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1371
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1372
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1373
<table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1374
  <thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1375
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1376
      <th>Attribute</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1377
      <th>Defined in</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1378
      <th>Default Value</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1379
      <th>Description</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1380
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1381
  </thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1382
  <tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1383
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1384
      <td><code>linkSelector</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1385
      <td><code>Y.PjaxBase</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1386
      <td><code>&quot;a&quot;</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1387
      <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1388
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1389
        CSS selector string used to filter link click events so that only the links which match it will have the enhanced-navigation behavior of pjax applied.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1390
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1391
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1392
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1393
        When a link is clicked and that link matches this selector, navigating to the link's <code>href</code> URL using the enhanced, pjax, behavior will be attempted; and the browser's default way to navigate to new pages will be the fallback.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1394
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1395
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1396
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1397
        By default this selector will match <em>all</em> links on the page.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1398
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1399
      </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1400
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1401
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1402
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1403
      <td><code>navigateOnHash</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1404
      <td><code>Y.PjaxBase</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1405
      <td><code>false</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1406
      <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1407
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1408
        Whether navigating to a hash-fragment identifier on the current page should be enhanced and cause the <code>navigate</code> event to fire.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1409
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1410
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1411
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1412
        By default Pjax allows the browser to perform its default action when a user is navigating within a page by clicking in-page links (e.g. <code>&lt;a href=&quot;#top&quot;&gt;Top of page&lt;&#x2F;a&gt;</code>) and does not attempt to interfere or enhance in-page navigation.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1413
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1414
      </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1415
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1416
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1417
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1418
      <td><code>scrollToTop</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1419
      <td><code>Y.PjaxBase</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1420
      <td><code>true</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1421
      <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1422
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1423
        Whether the page should be scrolled to the top after navigating to a URL.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1424
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1425
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1426
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1427
        When the user clicks the browser's back button, the previous scroll position will be maintained.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1428
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1429
      </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1430
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1431
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1432
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1433
      <td><code>serverRouting</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1434
      <td><code>Y.App.Base</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1435
      <td><code>undefined</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1436
      <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1437
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1438
        Whether or not this application's server is capable of properly routing all requests and rendering the initial state in the HTML responses.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1439
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1440
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1441
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1442
        See <a href="#app-attributes">App Attributes</a> and <a href="#routing-coordination-with-server">Routing Coordination with Server</a> for more details.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1443
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1444
      </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1445
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1446
  </tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1447
</table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1448
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1449
<h4 id="navigate-event"><code>navigate</code> Event</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1450
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1451
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1452
When the user is navigating to a URL for which the app has a route handler, the <code>navigate</code> event will fire. The default action of this event updates the browser’s address bar to reflect the new URL, causing the app to dispatch to the matching route handlers.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1453
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1454
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1455
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1456
Listening to your app's <code>navigate</code> event is a useful way to indicate to the user that something is loading while they wait for the app to fully handle the new URL, possibly loading data from a remote server.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1457
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1458
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1459
<pre class="code prettyprint">var app = new Y.App({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1460
    views: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1461
        users: {}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1462
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1463
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1464
    users: new Y.ModelList()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1465
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1466
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1467
app.route(&#x27;&#x2F;users&#x2F;&#x27;, function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1468
    var users = app.get(&#x27;users&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1469
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1470
    &#x2F;&#x2F; Load users data from a remote server.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1471
    users.load(function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1472
        app.showView(&#x27;users&#x27;, {users: users});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1473
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1474
        &#x2F;&#x2F; Removes the &quot;loading&quot; class from the app&#x27;s &#x60;container&#x60; node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1475
        app.get(&#x27;container&#x27;).removeClass(&#x27;loading&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1476
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1477
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1478
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1479
&#x2F;&#x2F; Listen for the app&#x27;s &#x60;navigate&#x60; event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1480
app.on(&#x27;navigate&#x27;, function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1481
    &#x2F;&#x2F; Adds the &quot;loading&quot; class to the app&#x27;s &#x60;container&#x60; node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1482
    app.get(&#x27;container&#x27;).addClass(&#x27;loading&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1483
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1484
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1485
&#x2F;&#x2F; Navigate the user to &quot;&#x2F;users&#x2F;&quot;.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1486
app.navigate(&#x27;&#x2F;users&#x2F;&#x27;);</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1487
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1488
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1489
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1490
Refer to App's API Docs for more details about the <a href="http://yuilibrary.com/yui/docs/api/classes/App.html#event_navigate"><code>navigate</code> event</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1491
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1492
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1493
<h2 id="extending-yapp">Extending <code>Y.App</code></h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1494
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1495
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1496
The <code>Y.App</code> class is intended to be mutable insofar as being the host for <em>all</em> App-component features, whereas <code>Y.App.Base</code> is intended to remain pure and just host the basic set of features. This allows for two different ways to extend the functionality of <code>Y.App</code>: <a href="#mixing-in-features">mixing-in features</a>, and <a href="#subclassing">subclassing</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1497
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1498
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1499
<h3 id="mixing-in-features">Mixing-In Features</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1500
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1501
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1502
Additional class extensions can be automatically mixed-into <code>Y.App</code>, doing so will dynamically extend the functionality of the App class making these new features available to all of its instances and subclasses. The <a href="#yappcontent"><code>Y.App.Content</code></a> and <a href="#yapptransitions"><code>Y.App.Transitions</code></a> class extensions, provided by the <code>app-content</code> and <code>app-transitions</code> modules respectively, use this pattern to add features <code>Y.App</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1503
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1504
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1505
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1506
The following shows a simplified view of how the transitions feature is added to <code>Y.App</code>:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1507
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1508
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1509
<pre class="code prettyprint">&#x2F;&#x2F; Creates the namespace for the transitions class extension and assigns a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1510
&#x2F;&#x2F; simple constructor function to it.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1511
Y.App.Transitions = function () {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1512
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1513
&#x2F;&#x2F; Defines the &#x60;transitions&#x60; attribute with a default value of &#x60;false&#x60;. This
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1514
&#x2F;&#x2F; makes the view transitions an opt-in feature.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1515
Y.App.Transitions.ATTRS = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1516
    transitions: {value: false}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1517
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1518
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1519
&#x2F;&#x2F; This defines the prototype of the transitions class extension, the actual
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1520
&#x2F;&#x2F; implementation has been left out for the sake of simplicity.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1521
Y.App.Transitions.prototype = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1522
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1523
    &#x2F;&#x2F; The implementation of the transition features would be here.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1524
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1525
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1526
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1527
&#x2F;&#x2F; Here the transitions class extension is being applied automatically by
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1528
&#x2F;&#x2F; mixing itself into the &#x60;Y.App&#x60; class.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1529
Y.Base.mix(Y.App, [Y.App.Transitions]);</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1530
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1531
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1532
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1533
When this module is included in the YUI instance, the transitions support for App can be used by simply toggling it on:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1534
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1535
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1536
<pre class="code prettyprint">YUI().use(&#x27;app-base&#x27;, &#x27;app-transitions&#x27;, function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1537
    var app = new Y.App({transitions: true});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1538
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1539
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1540
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1541
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1542
When writing your own class extensions to add features to <code>Y.App</code>, feel free to add them to App's namespace (e.g., <code>Y.App.SomeNewFeature</code>), and be sure to follow these two rules:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1543
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1544
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1545
<ol>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1546
  <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1547
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1548
    The additional functionality should be <strong>disabled by default</strong>. The API for the class extensions should provide some way for the user to <em>opt-in</em> to using the features it adds.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1549
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1550
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1551
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1552
    The <code>Y.App.Transitions</code> class extension does this be requiring a "truthy" value for the <code>transitions</code> attribute. By default the value will be <code>false</code>, making this an opt-in feature.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1553
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1554
  </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1555
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1556
  <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1557
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1558
    Be courteous to the other App component class extensions, since they all share the same <code>prototype</code> be careful not to unintentionally overwrite other properties or methods.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1559
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1560
  </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1561
</ol>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1562
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1563
<h3 id="subclassing">Subclassing</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1564
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1565
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1566
Creating class extensions for <a href="#mixing-in-features">mixing-in features</a> to <code>Y.App</code> is a great way to extend its functionality in a reusable way while not changing how you <a href="#instantiating-app">Instantiate an App</a>; but might find it more useful to extend the <code>Y.App</code> class to create a subclass customized to your specific needs.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1567
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1568
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1569
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1570
Use the <code>Y.Base.create()</code> method to extend <code>Y.App</code> and add or override prototype and static members and attributes. You may also optionally specify one or more <a href="../base/index.html#extensions">class extensions</a> to mix into your new class.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1571
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1572
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1573
<pre class="code prettyprint">&#x2F;&#x2F; Create a Y.CustomApp class that extends Y.App.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1574
Y.CustomApp = Y.Base.create(&#x27;customApp&#x27;, Y.App, [], {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1575
    &#x2F;&#x2F; Add or override prototype properties and methods here.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1576
}, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1577
    &#x2F;&#x2F; Add static properties and methods here.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1578
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1579
    ATTRS: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1580
        &#x2F;&#x2F; Add or override default attributes here.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1581
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1582
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1583
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1584
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1585
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1586
One benefit of extending <code>Y.App</code> is that you can easily add default views, routes, and route handlers to your custom App class, and they'll be shared by all instances of that class unless overridden at the instance level:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1587
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1588
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1589
<pre class="code prettyprint">&#x2F;&#x2F; Create a Y.CustomApp class that extends Y.App.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1590
Y.CustomApp = Y.Base.create(&#x27;customApp&#x27;, Y.App, [], {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1591
    &#x2F;&#x2F; Default registered views inherited by all CustomApp instances.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1592
    views: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1593
        home : {preserve: true},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1594
        users: {preserve: true},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1595
        user : {parent: &#x27;users&#x27;}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1596
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1597
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1598
    &#x2F;&#x2F; Default route handlers inherited by all CustomApp instances.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1599
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1600
    handleHome: function (req) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1601
        &#x2F;&#x2F; Handle the &quot;&#x2F;&quot; route here.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1602
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1603
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1604
    handleUsers: function (req) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1605
        &#x2F;&#x2F; Handle the &quot;&#x2F;users&#x2F;&quot; route here.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1606
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1607
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1608
    handleUser: function (req) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1609
        &#x2F;&#x2F; Handle the &quot;&#x2F;users&#x2F;:name&#x2F;&quot; route here.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1610
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1611
}, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1612
    ATTRS: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1613
        &#x2F;&#x2F; Share these routes with all CustomApp instances.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1614
        routes: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1615
            value: [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1616
                {path: &#x27;&#x2F;&#x27;,             callbacks: &#x27;handleHome&#x27;},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1617
                {path: &#x27;&#x2F;users&#x2F;&#x27;,       callbacks: &#x27;handleUsers&#x27;},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1618
                {path: &#x27;&#x2F;users&#x2F;:name&#x2F;&#x27;, callbacks: &#x27;handleUser&#x27;}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1619
            ]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1620
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1621
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1622
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1623
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1624
&#x2F;&#x2F; Create a CustomApp instance that inherits the defaults and adds to them.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1625
var app = new Y.CustomApp({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1626
    &#x2F;&#x2F; Register an additional view. The &#x60;home&#x60;, &#x60;users&#x60;, and &#x60;user&#x60; views will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1627
    &#x2F;&#x2F; also be inherited.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1628
    views: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1629
        about: {preserve: true}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1630
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1631
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1632
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1633
&#x2F;&#x2F; Add a route and route handler.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1634
app.route(&#x27;&#x2F;about&#x2F;&#x27;, function (req) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1635
    &#x2F;&#x2F; Handle the &quot;&#x2F;about&#x2F;&quot; route here.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1636
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1637
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1638
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1639
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1640
Now all instances of <code>Y.CustomApp</code> will inherit all the custom defaults and can add to or override them. The <code>app</code> instance created here will handle the <code>&quot;&#x2F;&quot;</code>, <code>&quot;&#x2F;users&#x2F;&quot;</code>, and <code>&quot;&#x2F;users&#x2F;:name&#x2F;&quot;</code> routes in addition to its own <code>&quot;&#x2F;about&#x2F;&quot;</code> route.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1641
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1642
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1643
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1644
Before you subclass <code>Y.App</code>, you should refer to <a href="http://yuilibrary.com/yui/docs/api/modules/app-base.html">App's API docs</a> to become familiar with its public and protected properties and methods.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1645
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1646
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1647
<h2 id="app-extensions">App Extensions</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1648
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1649
<h3 id="yappcontent"><code>Y.App.Content</code></h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1650
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1651
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1652
The <a href="http://yuilibrary.com/yui/docs/api/classes/App.Content.html">Content</a> extension provides pjax-style content fetching and handling. This makes it easy to fetch server rendered content for URLs using Ajax. The HTML content returned from the server will be view-ified and set as the app's main content, making it seamless to use a mixture of server and client rendered views.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1653
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1654
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1655
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1656
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1657
<h3 id="yapptransitions"><code>Y.App.Transitions</code></h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1658
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1659
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1660
The <a href="http://yuilibrary.com/yui/docs/api/classes/App.Transitions.html">Transitions</a> extension provides view transitions for apps in browsers which support native CSS3 transitions. View transitions visually enhance the change from one "page" to the next that is both pleasant to the user and helps to communicate a hierarchy between sections of an application.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1661
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1662
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1663
<h4 id="enabling-transitions">Enabling Transitions</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1664
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1665
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1666
Enabling transitions for an app just requires <em>opting-in</em>. The following will create a new <code>Y.App</code> instance with the default transitions enabled:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1667
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1668
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1669
<pre class="code prettyprint">var app = new Y.App({transitions: true});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1670
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1671
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1672
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1673
With transitions enabled for an app, anytime the app's <code>activeView</code> changes, there will be a visual transition from the old to the new active view. How an app's <code>views</code> are configured effects which transition will be used, e.g. when changing between views which have a hierarchical relationship a sliding transition will be used.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1674
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1675
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1676
<h4 id="types-of-activeview-changes">Types of <code>activeView</code> Changes</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1677
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1678
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1679
The following are the types of <code>activeView</code> changes for which transitions can be defined that correspond to the relationship between the new and old <code>activeView</code>:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1680
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1681
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1682
<dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1683
  <dt><code>navigate</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1684
  <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1685
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1686
    The default transition to use when changing the <code>activeView</code> of the application. This will be <strong><code>&quot;fade&quot;</code></strong> by default.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1687
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1688
  </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1689
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1690
  <dt><code>toChild</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1691
  <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1692
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1693
    The transition to use when the new <code>activeView</code> is configured as a child of the previously active view via its <code>parent</code> property as defined in this app's <code>views</code>. This will be <strong><code>&quot;slideLeft&quot;</code></strong> by default.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1694
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1695
  </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1696
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1697
  <dt><code>toParent</code></dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1698
  <dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1699
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1700
    The transition to use when the new <code>activeView</code> is configured as the <code>parent</code> of the previously active view as defined in this app's <code>views</code>. This will be <strong><code>&quot;slideRight&quot;</code></strong> by default.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1701
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1702
  </dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1703
</dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1704
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1705
<h4 id="overriding-default-transitions">Overriding Default Transitions</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1706
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1707
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1708
The default transitions can be overridden in the following ways:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1709
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1710
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1711
<ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1712
  <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1713
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1714
    Overriding the <a href="http://yuilibrary.com/yui/docs/api/classes/App.html#property_transitions"><code>transitions</code> property</a> which is used as the default transitions for all <code>Y.App</code> instances.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1715
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1716
  </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1717
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1718
  <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1719
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1720
    Specifying a <code>transitions</code> configuration object when instantiating a new app, which sets the app's <a href="http://yuilibrary.com/yui/docs/api/classes/App.html#attr_transitions"><code>transitions</code> attribute</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1721
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1722
  </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1723
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1724
  <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1725
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1726
    Specifying a <code>transition</code> when calling the <a href="http://yuilibrary.com/yui/docs/api/classes/App.html#method_showView"><code>showView()</code> method</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1727
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1728
  </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1729
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1730
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1731
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1732
The following example will override which transitions should be used by default, and specifically set the <code>transition</code> option on certain calls to <code>showView()</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1733
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1734
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1735
<pre class="code prettyprint">var app = new Y.App({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1736
    &#x2F;&#x2F; The app&#x27;s three views and their relationships between one another.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1737
    views: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1738
        home   : {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1739
        about  : {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1740
        contact: {parent: &#x27;about&#x27;},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1741
        team   : {parent: &#x27;about&#x27;}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1742
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1743
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1744
    &#x2F;&#x2F; Overrides the default transitions types all to &quot;fade&quot; which will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1745
    &#x2F;&#x2F; cross-fade between &#x60;activeView&#x60; changes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1746
    transitions: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1747
        navigate: &#x27;fade&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1748
        toChild : &#x27;fade&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1749
        toParent: &#x27;fade&#x27;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1750
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1751
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1752
    &#x2F;&#x2F; The app&#x27;s &#x60;team&#x60; model list for use by the &quot;team&quot; view.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1753
    team: new Y.ModelList().reset([
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1754
        {name: &#x27;Eric Ferraiuolo&#x27;},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1755
        {name: &#x27;Ryan Grove&#x27;}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1756
    ])
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1757
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1758
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1759
app.route(&#x27;&#x2F;&#x27;, function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1760
    &#x2F;&#x2F; Will transition via &quot;fade&quot;.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1761
    app.showView(&#x27;home&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1762
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1763
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1764
app.route(&#x27;&#x2F;about&#x2F;&#x27;, function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1765
    &#x2F;&#x2F; Will transition via &quot;fade&quot;, even though we maybe coming from a child
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1766
    &#x2F;&#x2F; view (i.e. &quot;contact&quot; or &quot;team&quot;).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1767
    app.showView(&#x27;about&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1768
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1769
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1770
app.route(&#x27;&#x2F;about&#x2F;contact&#x2F;&#x27;, function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1771
    &#x2F;&#x2F; Will transition via &quot;fade&quot;, even though we maybe coming from the parent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1772
    &#x2F;&#x2F; &quot;about&quot; view.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1773
    app.showView(&#x27;contact&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1774
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1775
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1776
app.route(&#x27;&#x2F;about&#x2F;team&#x2F;&#x27;, function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1777
    &#x2F;&#x2F; Shows the &quot;team&quot; view, passing it the app&#x27;s &#x60;team&#x60; model list, and
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1778
    &#x2F;&#x2F; overrides the &#x60;transition&#x60; options so no visual transitions will occur.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1779
    app.showView(&#x27;team&#x27;, {team: this.get(&#x27;team&#x27;)}, {transition: false});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1780
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1781
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1782
app.render().dispatch();</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1783
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1784
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1785
<h4 id="transition-aiding-css">Transition-Aiding CSS</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1786
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1787
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1788
Some structural CSS is required to setup an app's <code>container</code> and <code>viewContainer</code> nodes so the app's views transition properly. While an app's views are transitioning, the CSS class: <strong><code>yui3-app-transitioning</code></strong> will be added to the app's <code>container</code> node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1789
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1790
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1791
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1792
<strong>Note:</strong> While transitioning, the app's <code>viewContainer</code> node will have its <code>overflow-x</code> set to <code>hidden</code>. This causes its margins to <em>not collapse</em> with its child nodes. To compensate for this, it is best to not style your views with margins.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1793
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1794
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1795
<h2 id="best-practices">Best Practices</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1796
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1797
<h3 id="progressively-enhanced-vs-client-only-apps">Progressively-enhanced vs. Client-only Apps</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1798
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1799
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1800
It's important to understand the difference between the preferred approach of developing an app using a progressive enhancement strategy vs. creating a client side-only app, and when it might be appropriate to do so. As discussed in the <a href="#routing-coordination-with-server">Routing Coordination with Server</a>, <code>Y.App</code> provides the tools and is flexible enough to implement an app using either strategy, but <strong>there are drawbacks to client-only applications</strong>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1801
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1802
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1803
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1804
The following sections build on <a href="../router/index.html#best-practices">Router's Best Practices</a>, all of which apply, by looking at things from a higher level, application perspective:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1805
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1806
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1807
<h4 id="full-path-vs-hash-based-urls">Full-path vs. Hash-based URLs</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1808
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1809
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1810
Before making a decision to use hash-based URLs in your application, you should <strong>be aware of their drawbacks</strong>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1811
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1812
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1813
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1814
A client-only app will use hash-based URLs instead of the standard, full-path URLs. When the server receives a request for a hash-based URL everything after and including the fragment identifier ("#") is lost. This means your application will have to rely on the JavaScript to finish fulfilling the request for the user.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1815
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1816
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1817
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1818
The following shows how this information loss manifests itself:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1819
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1820
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1821
<pre class="code">Browser URL: http:&#x2F;&#x2F;example.com&#x2F;#&#x2F;foo&#x2F;bar&#x2F;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1822
Request URL: http:&#x2F;&#x2F;example.com&#x2F;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1823
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1824
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1825
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1826
The request URL that the server will see is missing the entire path, this means every URL in your application looks to the server as if it's the same page! To prevent link rot in your application, you'll have to support the hash-based variation of your URLs indefinitely.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1827
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1828
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1829
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1830
Ideally you should prefer full-path URLs (e.g., http://example.com/foo/bar/) for your application and be able to handle full page loads for browsers which are not capable of using HTML5 history. This requires a server capable of routing requests and rendering the initial state of the application in the HTML responses. This is the main idea behind a progressive enhancement development strategy — providing a better experience for more capable browsers/devices.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1831
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1832
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1833
<h4 id="performance-and-seo">Performance and SEO</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1834
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1835
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1836
Client-only apps suffer in more places than just their URLs. There are <em>horrible side-effects</em> of using hash-based URLs: degradation in performance of rendering the app's initial state, and lack of SEO.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1837
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1838
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1839
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1840
It is faster to render the initial state of an app on the server before delegating control to the client-side JavaScript. But in order to achieve this, the server must be capable of routing requests and rendering this initial state. This means your application needs to be using full-path URLs.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1841
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1842
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1843
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1844
To render the initial state in a client-only app, the server has to send over the HTML "shell" page, which then makes more HTTP requests to get the JavaScript. Once the JavaScript has been downloaded and parsed, it can execute and construct the <code>Y.App</code> instance. The app now needs to fetch data from the server (yet another HTTP request), and then it can display the initial state. All while the user is staring at a blank page — which is a horrible user experience, especially on a mobile device with a slower connection.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1845
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1846
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1847
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1848
Optimizing your app to be indexed by search engines also relates to this. SEO requires that your app uses full-path URLs so the server can route requests and render the initial state. The basic functions of your app which you want to be indexable should work without JavaScript.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1849
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1850
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1851
<h4 id="when-client-only-apps-are-appropriate">When Client-only Apps are Appropriate</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1852
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1853
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1854
Given all the drawbacks of client-only apps, there's one major advantage: <strong>they don't rely on the server</strong>. If your app needs to run off the filesystem, or be deployed to a "dumb" static file server, then this might be your only option.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1855
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1856
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1857
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1858
Developing a client-only app using <code>Y.App</code> still gives you nice (but hash-based) URLs that are bookmarkable, browser back/forward button support, and view management.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1859
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1860
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1861
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1862
<strong>Please make sure you understand the issues with hash-based URLs and their side-effects.</strong> Consider developing your application using a progressive enhancement strategy, it will be worth the extra effort in the long run.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1863
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1864
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1865
<h3 id="flow-control">Flow Control</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1866
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1867
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1868
When developing an app, it's important to have a clear understanding about how the various components are working together. The use of consistent patterns for information sharing, and execution of operations aid in maintaining a separation of concerns which becomes ever more crucial as the size of the app and team increases.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1869
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1870
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1871
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1872
Restricting the flow of information to a single direction creates a "one-way street" which enforces a strict separation of concerns and divides control over execution throughout an application. This strategy can be implemented by leveraging YUI's powerful custom event infrastructure. All of the components of App Framework are <code>Y.Base</code>-based, and therefore are primed to be both publishers and subscribers of an app's custom events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1873
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1874
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1875
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1876
The following example app demonstrates how to wire up the components of an application using custom events to achieve the one-way flow of information and divide control by maintaining a strict separation of concerns:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1877
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1878
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1879
<pre class="code prettyprint">&#x2F;&#x2F; Create the &#x60;UserView&#x60;.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1880
Y.UserView = Y.Base.create(&#x27;userView&#x27;, Y.View, [], {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1881
    template: &#x27;&lt;p&gt;{name}&lt;&#x2F;p&gt;&#x27; +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1882
              &#x27;&lt;label for=&quot;name-input&quot;&gt;Name:&lt;&#x2F;label&gt;&#x27; +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1883
              &#x27;&lt;input id=&quot;name-input&quot; type=&quot;text&quot; value=&quot;{name}&quot; &#x2F;&gt;&#x27; +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1884
              &#x27;&lt;button&gt;Save&lt;&#x2F;button&gt;&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1885
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1886
    &#x2F;&#x2F; Listens for DOM events from the user and translates them into application
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1887
    &#x2F;&#x2F; events; e.g., &quot;click&quot; -&gt; &quot;save&quot;.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1888
    events: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1889
        &#x27;button&#x27;: {click: &#x27;save&#x27;}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1890
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1891
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1892
    initializer: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1893
        &#x2F;&#x2F; Listens for the user model to change, and re-renders the view.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1894
        this.get(&#x27;user&#x27;).after(&#x27;change&#x27;, this.render, this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1895
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1896
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1897
    render: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1898
        var user    = this.get(&#x27;user&#x27;),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1899
            content = Y.Lang.sub(this.template, {name: user.get(&#x27;name&#x27;)});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1900
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1901
        this.get(&#x27;container&#x27;).setHTML(content);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1902
        return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1903
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1904
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1905
    &#x2F;&#x2F; This view doesn&#x27;t actually do the saving, instead, it is translating the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1906
    &#x2F;&#x2F; user&#x27;s intent (they click the Save button) to an application-level event.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1907
    &#x2F;&#x2F; This way control is given to the app to respond to this action.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1908
    save: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1909
        var user = this.get(&#x27;user&#x27;),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1910
            name = this.get(&#x27;container&#x27;).one(&#x27;input&#x27;).get(&#x27;value&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1911
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1912
        &#x2F;&#x2F; Fires the save event and passes along the needed information. When
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1913
        &#x2F;&#x2F; this is the app&#x27;s &#x60;activeView&#x60; this event will bubble to the app.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1914
        this.fire(&#x27;save&#x27;, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1915
            user: user,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1916
            name: name
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1917
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1918
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1919
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1920
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1921
&#x2F;&#x2F; Create the app and define the app&#x27;s &#x60;views&#x60;, and assign a new &#x60;Model&#x60;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1922
&#x2F;&#x2F; instance as an ad-hoc attribute to the app.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1923
var app = new Y.App({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1924
    views: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1925
        user: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1926
            type    : &#x27;UserView&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1927
            preserve: true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1928
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1929
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1930
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1931
    user: new Y.Model()
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1932
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1933
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1934
&#x2F;&#x2F; The app listens for the &#x60;UserView&#x60; to fire its &#x60;save&#x60; event. The only will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1935
&#x2F;&#x2F; only be notified if the view is the app&#x27;s current &#x60;activeView&#x60;.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1936
app.on(&#x27;userView:save&#x27;, function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1937
    &#x2F;&#x2F; The app has the control to execute update the model and execute the save
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1938
    &#x2F;&#x2F; operation. Updating the model will cause the view to re-render.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1939
    e.user.set(&#x27;name&#x27;, e.name).save();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1940
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1941
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1942
&#x2F;&#x2F; Renders the app and set&#x27;s the &#x60;user&#x60; view and the &#x60;activeView&#x60;, passing it
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1943
&#x2F;&#x2F; the user model.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1944
app.render().showView(&#x27;user&#x27;, {user: app.get(&#x27;user&#x27;)});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1945
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1946
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1947
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1948
The main thing to note about the above example is that the <code>UserView</code> is <em>not</em> updating its <code>user</code> model directly, instead it is translating the user's intent via DOM events into application-level events. This gives control back to the app so it can decide how best to proceed. The result is a flow of information and control that moves in one direction and in a continuous loop.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1949
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1950
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1951
<h3 id="preserved-views">Preserved Views</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1952
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1953
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1954
An app's <code>views</code> can be defined so that a single instance of a particular view is preserved and can be reused. When a view is defined with its <code>preserve</code> property set to <code>true</code>, the same view instance will be used each time the app's <code>showView()</code> method is called to set it as the app's <code>activeView</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1955
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1956
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1957
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1958
Preserved views should be used in situations where the contents of the view might not change and that view will be displayed often. They are especially useful if its contents have a complex DOM structure that would be costly to create each time the view was to be shown.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1959
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1960
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1961
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1962
Imagine a simple app that displays user information in two views: a <code>users</code> view that lists all the users, and a <code>user</code> view that displays the details of a single user. If the set of all users in this application won't change often, then it would be a good idea to make the <code>users</code> view a preserved view. That way it only has to be constructed once, and the same view instance can be shown many times. Whereas the contents of the <code>user</code> view are always going to change depending on which user is being displayed, making it <em>not</em> suitable to preserve.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1963
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1964
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1965
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1966
The following example demonstrates how this hypothetical users app would define its two views:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1967
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1968
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1969
<pre class="code prettyprint">&#x2F;&#x2F; Create the &#x60;UsersView&#x60;.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1970
Y.UsersView = Y.Base.create(&#x27;usersView&#x27;, Y.View, [], {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1971
    &#x2F;&#x2F; Implementation would be here...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1972
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1973
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1974
&#x2F;&#x2F; Create the &#x60;UserView&#x60;.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1975
Y.UserView = Y.Base.create(&#x27;userView&#x27;, Y.View, [], {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1976
    &#x2F;&#x2F; Implementation would be here...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1977
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1978
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1979
&#x2F;&#x2F; Create the app and define its two views.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1980
var app = new Y.App({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1981
    views: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1982
        &#x2F;&#x2F; Only one &#x60;users&#x60; view instance will be created and it will be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1983
        &#x2F;&#x2F; preserved for reuse.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1984
        users: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1985
            preserve: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1986
            type    : &#x27;UsersView&#x27;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1987
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1988
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1989
        &#x2F;&#x2F; A new &#x60;user&#x60; view instance will be created every time.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1990
        user: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1991
            type  : &#x27;UserView&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1992
            parent: &#x27;users&#x27;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1993
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1994
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1995
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1996
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1997
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1998
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  1999
Be cautious about the number of preserved views you have in your application. Their DOM structures are maintained even when they are not in the visible portion of the page's DOM, this means the more preserved views, the more memory your application will consume. On mobile devices with very limited memory and no swap space, consuming too much memory in your app can cause the browser to crash.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2000
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2001
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2002
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2003
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2004
<h2 id="known-limitations">Known Limitations</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2005
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2006
<ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2007
  <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2008
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2009
    <strong>When multiple App instances are on the page, only one can manage the URL and navigation.</strong> All of the app instances can have route handlers, but only one should have its <code>linkSelector</code> attribute set to a non-falsy value. See <a href="#configuring-navigation-behavior">Configuring Navigation Behavior</a> for more details.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2010
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2011
  </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2012
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2013
  <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2014
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2015
    <strong>Transitions are only supported in WebKit and Firefox browsers which also support CSS3 transitions.</strong> It is intended to only support transitions in browser which have native CSS3 transitions, and YUI's <a href="../transition/index.html">Transition</a> component only supports WebKit and Firefox.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2016
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2017
  </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2018
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2019
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2020
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2021
App relies heavily on Router which has some known limitations in Internet Explorer 9 and lower, and Android 2.x. See <a href="../router/index.html#known-limitations">Router's Known Limitations</a> for more details.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2022
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2023
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2024
            </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2025
        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2026
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2027
        <div class="yui3-u-1-4">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2028
            <div class="sidebar">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2029
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2030
                    <div id="toc" class="sidebox">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2031
                        <div class="hd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2032
                            <h2 class="no-toc">Table of Contents</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2033
                        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2034
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2035
                        <div class="bd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2036
                            <ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2037
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2038
<a href="#getting-started">Getting Started</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2039
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2040
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2041
<a href="#components-of-the-app-framework">Components of the App Framework</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2042
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2043
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2044
<a href="#app-component">App Component</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2045
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2046
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2047
<a href="#using-app">Using App</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2048
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2049
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2050
<a href="#instantiating-app">Instantiating App</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2051
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2052
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2053
<a href="#config-properties">Config Properties</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2054
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2055
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2056
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2057
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2058
<a href="#app-properties">App Properties</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2059
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2060
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2061
<a href="#app-attributes">App Attributes</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2062
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2063
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2064
<a href="#routing-coordination-with-server">Routing Coordination with Server</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2065
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2066
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2067
<a href="#urls-based-on-browser-capabilities">URLs Based on Browser Capabilities</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2068
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2069
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2070
<a href="#full-path-urls-only">Full-path URLs Only</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2071
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2072
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2073
<a href="#hash-based-urls-only">Hash-based URLs Only</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2074
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2075
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2076
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2077
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2078
<a href="#rendering-an-app">Rendering an App</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2079
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2080
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2081
<a href="#specifying-container-nodes">Specifying Container Nodes</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2082
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2083
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2084
<a href="#overriding-render">Overriding <code>render()</code></a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2085
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2086
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2087
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2088
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2089
<a href="#view-management">View Management</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2090
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2091
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2092
<a href="#declaring-views">Declaring Views</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2093
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2094
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2095
<a href="#switching-the-active-view">Switching the Active View</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2096
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2097
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2098
<a href="#understanding-showview-options">Understanding <code>showView()</code> Options</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2099
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2100
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2101
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2102
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2103
<a href="#server-rendered-views">Server Rendered Views</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2104
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2105
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2106
<a href="#progressively-enhanced-views">Progressively Enhanced Views</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2107
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2108
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2109
<a href="#loading-static-content">Loading Static Content</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2110
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2111
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2112
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2113
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2114
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2115
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2116
<a href="#navigating-between-pages">Navigating Between "Pages"</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2117
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2118
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2119
<a href="#programmatic-navigation">Programmatic navigation</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2120
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2121
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2122
<a href="#configuring-navigation-behavior">Configuring Navigation Behavior</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2123
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2124
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2125
<a href="#navigate-event"><code>navigate</code> Event</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2126
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2127
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2128
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2129
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2130
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2131
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2132
<a href="#extending-yapp">Extending <code>Y.App</code></a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2133
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2134
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2135
<a href="#mixing-in-features">Mixing-In Features</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2136
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2137
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2138
<a href="#subclassing">Subclassing</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2139
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2140
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2141
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2142
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2143
<a href="#app-extensions">App Extensions</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2144
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2145
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2146
<a href="#yappcontent"><code>Y.App.Content</code></a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2147
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2148
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2149
<a href="#yapptransitions"><code>Y.App.Transitions</code></a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2150
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2151
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2152
<a href="#enabling-transitions">Enabling Transitions</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2153
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2154
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2155
<a href="#types-of-activeview-changes">Types of <code>activeView</code> Changes</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2156
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2157
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2158
<a href="#overriding-default-transitions">Overriding Default Transitions</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2159
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2160
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2161
<a href="#transition-aiding-css">Transition-Aiding CSS</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2162
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2163
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2164
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2165
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2166
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2167
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2168
<a href="#best-practices">Best Practices</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2169
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2170
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2171
<a href="#progressively-enhanced-vs-client-only-apps">Progressively-enhanced vs. Client-only Apps</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2172
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2173
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2174
<a href="#full-path-vs-hash-based-urls">Full-path vs. Hash-based URLs</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2175
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2176
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2177
<a href="#performance-and-seo">Performance and SEO</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2178
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2179
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2180
<a href="#when-client-only-apps-are-appropriate">When Client-only Apps are Appropriate</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2181
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2182
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2183
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2184
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2185
<a href="#flow-control">Flow Control</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2186
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2187
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2188
<a href="#preserved-views">Preserved Views</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2189
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2190
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2191
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2192
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2193
<a href="#known-limitations">Known Limitations</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2194
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2195
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2196
                        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2197
                    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2198
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2199
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2200
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2201
                    <div class="sidebox">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2202
                        <div class="hd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2203
                            <h2 class="no-toc">Examples</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2204
                        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2205
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2206
                        <div class="bd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2207
                            <ul class="examples">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2208
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2209
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2210
                                        <li data-description="A basic todo list built with the Model, Model List, and View components.">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2211
                                            <a href="app-todo.html">Todo List</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2212
                                        </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2213
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2214
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2215
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2216
                                        <li data-description="An application to browse through the contributors of a GitHub project.">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2217
                                            <a href="app-contributors.html">GitHub Contributors</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2218
                                        </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2219
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2220
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2221
                            </ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2222
                        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2223
                    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2224
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2225
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2226
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2227
            </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2228
        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2229
    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2230
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2231
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2232
<script src="../assets/vendor/prettify/prettify-min.js"></script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2233
<script>prettyPrint();</script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2234
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2235
<script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2236
YUI.Env.Tests = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2237
    examples: [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2238
    project: '../assets',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2239
    assets: '../assets/app',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2240
    name: 'app',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2241
    title: 'App Framework',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2242
    newWindow: '',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2243
    auto:  false 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2244
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2245
YUI.Env.Tests.examples.push('app-todo');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2246
YUI.Env.Tests.examples.push('app-contributors');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2247
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2248
</script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2249
<script src="../assets/yui/test-runner.js"></script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2250
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2251
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2252
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2253
</body>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
  2254
</html>