src/cm/media/js/lib/yui/yui_3.10.3/docs/view/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>View</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>View</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
A View represents a renderable piece of an application's user interface, and provides hooks for easily subscribing to and handling delegated DOM events on a view's container element.
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
Views provide a generic structure for template- or DOM-based rendering. Views are template-agnostic, meaning that there's no actual template language built in, so you're welcome to use any template language you want (or none at all).
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
A common practice is to associate a View instance with a <a href="../model/index.html">Model</a> instance so that the view is automatically re-rendered whenever the data in the model changes, but this relationship is not required. A view may also be used standalone, associated with a <a href="../model-list/index.html">Model List</a>, or may even contain nested views.
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
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
The <code>Y.View</code> class is meant to be extended by a custom class that defines a custom <code>render()</code> method and any necessary DOM event handlers.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
<h2 id="getting-started">Getting Started</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
To include the source files for View and its dependencies, first load
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
the YUI seed file if you haven't already loaded it.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
<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
    56
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
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
    60
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
    61
YUI will automatically load any dependencies required by the modules you
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
specify.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
<pre class="code prettyprint">&lt;script&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
&#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
    67
YUI().use(&#x27;view&#x27;, function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
    &#x2F;&#x2F; View is available and ready for use. Add implementation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
    &#x2F;&#x2F; code here.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
&lt;&#x2F;script&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
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
For more information on creating YUI instances and on the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
<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
    77
documentation for the <a href="../yui/index.html">YUI Global Object</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
<h2 id="upgrading-from-yui-34x">Upgrading from YUI 3.4.x</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
A beta version of View was first introduced in YUI 3.4.0. If you're using View in YUI 3.4.0 or 3.4.1, you'll need to make the following changes to your code when upgrading:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
<ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
  <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
    The <code>container</code>, <code>model</code>, and <code>modelList</code> properties are now attributes. If you were accessing them as properties, update your code to access them as attributes instead. For example, <code>var model = myView.model</code> becomes <code>var model = myView.get(&#x27;model&#x27;)</code>, and <code>myView.model = thing</code> becomes <code>myView.set(&#x27;model&#x27;, thing);</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
  </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
  <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
    The <code>container</code> attribute now treats string values as CSS selectors. Previously, it assumed string values represented raw HTML. To get the same functionality as the old behavior, pass your HTML string through <code>Y.Node.create()</code> before passing it to <code>container</code>. For example, <code>new Y.View({container: &#x27;&lt;div&#x2F;&gt;&#x27;})</code> becomes <code>new Y.View({container: Y.Node.create(&#x27;&lt;div&#x2F;&gt;&#x27;)})</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
  </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
  <li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
    <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
    Destroying a view no longer also destroys the view's container node by default. To destroy a view's container node when destroying the view, pass <code>{remove: true}</code> to the view's <code>destroy()</code> method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
    </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
  </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
<h2 id="using-view">Using View</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
<h3 id="instantiating-view">Instantiating View</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
The most basic way to use View is to create an instance of the <code>Y.View</code> class, pass in some configuration attributes, and override the <code>render()</code> method at the instance level to define how your view will be rendered.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
<p class="tip">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
To demonstrate how to associate a Model with a View, this example uses an instance of the <code>Y.PieModel</code> class that's used in the examples in the <a href="../model/">Model User Guide</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
<p class="tip">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
Jump to the <a href="#view-attributes">View Attributes</a> section below to learn more about the <code>container</code>, <code>model</code>, and <code>template</code> attributes used in this example.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
<pre class="code prettyprint">var pie = new Y.PieModel({type: &#x27;apple&#x27;}),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
    pieView = new Y.View({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
      &#x2F;&#x2F; Override the default container attribute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
      container: Y.Node.create(&#x27;&lt;div class=&quot;pie&quot;&#x2F;&gt;&#x27;),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
      &#x2F;&#x2F; Specify an optional model to associate with the view.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
      model: pie,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
      &#x2F;&#x2F; Provide an optional template that will be used to render the view. The
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
      &#x2F;&#x2F; template can be anything we want, but in this case we&#x27;ll use a string
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
      &#x2F;&#x2F; that will be processed with Y.Lang.sub().
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
      template: &#x27;{slices} slice(s) of {type} pie remaining.&#x27;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
&#x2F;&#x2F; Override the render() method to define how the view will be rendered.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
pieView.render = function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
  var container = this.get(&#x27;container&#x27;),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
      html      = Y.Lang.sub(this.template, this.get(&#x27;model&#x27;).toJSON());
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
  &#x2F;&#x2F; Render this view&#x27;s HTML into the container element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
  container.setHTML(html);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
  &#x2F;&#x2F; Append the container element to the DOM if it&#x27;s not on the page already.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
  if (!container.inDoc()) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
    Y.one(&#x27;body&#x27;).append(container);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
  }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
  return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
&#x2F;&#x2F; Render the view.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
pieView.render();</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
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
This renders the following HTML to the page:
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
<pre class="code prettyprint">&lt;div class=&quot;pie&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
  6 slice(s) of apple pie remaining.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
&lt;&#x2F;div&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   166
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   167
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   168
Creating an instance of the base <code>Y.View</code> class like this makes it easy to get up and running with a simple view, but probably isn't the best way to create more complex views that need to handle DOM events, re-render automatically on model changes, etc.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   170
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   171
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   172
For more complex use cases, it's usually better to create a custom View subclass by <a href="#extending-yview">Extending <code>Y.View</code></a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   173
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   174
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   175
<h3 id="extending-yview">Extending <code>Y.View</code></h3>
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
The first step in creating a custom View class is to extend <code>Y.View</code>. This allows you to override the <code>render()</code> method and default View attributes to implement the desired behavior for your view, while also adding your own methods to handle DOM events and provide other custom view functionality.
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
If you want, you can establish a relationship between your view and a <a href="../model/index.html">Model</a> or <a href="../model-list/index.html">Model List</a> instance by attaching event handlers to them in a custom <code>initializer()</code> method. The initializer is typically where you would subscribe to model change events to be notified when you need to re-render your view.
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
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   186
This example demonstrates how to create a <code>Y.PieView</code> class that displays the current state of a <code>Y.PieModel</code> instance like the one defined in the <a href="../model/index.html">Model</a> user guide. It's functionally similar to the example shown in <a href="#instantiating-view">Instantiating View</a>, but adds the ability to handle a DOM event with a custom event handler, and automatically re-renders the view whenever the associated model changes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   187
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   188
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   189
<pre class="code prettyprint">&#x2F;&#x2F; Create a new Y.PieView class that extends Y.View and renders the current
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   190
&#x2F;&#x2F; state of a Y.PieModel instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   191
Y.PieView = Y.Base.create(&#x27;pieView&#x27;, Y.View, [], {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   192
  &#x2F;&#x2F; Add prototype methods and properties for your View here if desired. These
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   193
  &#x2F;&#x2F; will be available to all instances of your View. You may also override
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   194
  &#x2F;&#x2F; existing default methods and properties of Y.View.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   195
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   196
  &#x2F;&#x2F; Specify delegated DOM events to attach to the container.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   197
  events: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   198
    &#x27;.eat&#x27;: {click: &#x27;eatSlice&#x27;}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   199
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   200
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   201
  &#x2F;&#x2F; Provide a template that will be used to render the view. The template can
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   202
  &#x2F;&#x2F; be anything we want, but in this case we&#x27;ll use a string that will be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   203
  &#x2F;&#x2F; processed with Y.Lang.sub().
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   204
  template: &#x27;{slices} slice(s) of {type} pie remaining. &#x27; +
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   205
            &#x27;&lt;button class=&quot;eat&quot;&gt;Eat a Slice!&lt;&#x2F;button&gt;&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   206
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   207
  &#x2F;&#x2F; The initializer function will run when a view is instantiated. This is a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   208
  &#x2F;&#x2F; good time to subscribe to change events on a model instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   209
  initializer: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   210
    var model = this.get(&#x27;model&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   211
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   212
    &#x2F;&#x2F; Re-render this view when the model changes, and destroy this view when
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   213
    &#x2F;&#x2F; the model is destroyed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   214
    model.after(&#x27;change&#x27;, this.render, this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   215
    model.after(&#x27;destroy&#x27;, this.destroy, this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   216
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   217
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   218
  &#x2F;&#x2F; The render function is responsible for rendering the view to the page. It
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   219
  &#x2F;&#x2F; will be called whenever the model changes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   220
  render: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   221
    var container = this.get(&#x27;container&#x27;),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   222
        html      = Y.Lang.sub(this.template, this.get(&#x27;model&#x27;).toJSON());
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   223
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   224
    &#x2F;&#x2F; Render this view&#x27;s HTML into the container element.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   225
    container.setHTML(html);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   226
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   227
    &#x2F;&#x2F; Append the container element to the DOM if it&#x27;s not on the page already.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   228
    if (!container.inDoc()) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   229
      Y.one(&#x27;body&#x27;).append(container);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   230
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   231
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   232
    return this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   233
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   234
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   235
  &#x2F;&#x2F; The eatSlice function will handle click events on this view&#x27;s &quot;Eat a Slice&quot;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   236
  &#x2F;&#x2F; button.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   237
  eatSlice: function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   238
    &#x2F;&#x2F; Call the pie model&#x27;s eatSlice() function. This will consume a slice of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   239
    &#x2F;&#x2F; pie (if there are any left) and update the model, thus causing the view
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   240
    &#x2F;&#x2F; to re-render to reflect the new model data.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   241
    this.get(&#x27;model&#x27;).eatSlice();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   242
  }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   243
}, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   244
  &#x2F;&#x2F; Specify attributes and static properties for your View here.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   245
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   246
  ATTRS: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   247
    &#x2F;&#x2F; Override the default container attribute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   248
    container: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   249
      valueFn: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   250
        return Y.Node.create(&#x27;&lt;div class=&quot;pie&quot;&#x2F;&gt;&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   251
      }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   252
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   253
  }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   254
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   255
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   256
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   257
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   258
After defining the <code>Y.PieView</code> class and the <code>Y.PieModel</code> class (see the <a href="../model/index.html">Model</a> user guide), we can instantiate a new PieView and associate it with a PieModel instance.
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
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   261
<pre class="code prettyprint">var pie     = new Y.PieModel({type: &#x27;apple&#x27;}),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   262
    pieView = new Y.PieView({model: pie});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   263
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   264
pieView.render();</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   265
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   266
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   267
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   268
This renders the following HTML to the page:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   269
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   270
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   271
<pre class="code prettyprint">&lt;div class=&quot;pie&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   272
  6 slice(s) of apple pie remaining. &lt;button class=&quot;eat&quot;&gt;Eat a Slice!&lt;&#x2F;button&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   273
&lt;&#x2F;div&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   274
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   275
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   276
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   277
If the user clicks the "Eat a Slice!" button, the model will be updated and the view will re-render itself:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   278
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   279
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   280
<pre class="code prettyprint">&lt;div class=&quot;pie&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   281
  5 slice(s) of apple pie remaining. &lt;button class=&quot;eat&quot;&gt;Eat a Slice!&lt;&#x2F;button&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   282
&lt;&#x2F;div&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   283
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   284
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   285
<h3 id="views-models-and-addtarget">Views, Models, and <code>addTarget()</code></h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   286
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   287
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   288
In <a href="#extending-yview">Extending <code>Y.View</code></a>, the view's <code>initializer()</code> set two event listeners directly on the model:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   289
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   290
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   291
<pre class="code prettyprint">var model = this.get(&#x27;model&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   292
model.after(&#x27;change&#x27;, this.render, this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   293
model.after(&#x27;destroy&#x27;, this.destroy, this);</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   294
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
Alternatively, you can use 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   298
<a href="http://yuilibrary.com/yui/docs/api/classes/View.html#method_addTarget">addTarget()</a> 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   299
to create a bubbling chain.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   300
In the example below, the view automatically receives events from the model,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   301
which means you can now choose to set change event listeners on the view. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   302
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   303
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   304
<pre class="code prettyprint">Y.PieView = Y.Base.create(&#x27;pieView&#x27;, Y.View, [], {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   305
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   306
  ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   307
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   308
  initializer: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   309
    var model = this.get(&#x27;model&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   310
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   311
    &#x2F;&#x2F; If this view has a model, bubble model events to the view. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   312
    model &amp;&amp; model.addTarget(this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   313
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   314
    &#x2F;&#x2F; If the model gets swapped out, reset targets accordingly.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   315
    this.after(&#x27;modelChange&#x27;, function (ev) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   316
        ev.prevVal &amp;&amp; ev.prevVal.removeTarget(this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   317
        ev.newVal &amp;&amp; ev.newVal.addTarget(this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   318
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   319
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   320
    &#x2F;&#x2F; Re-render this view when the model changes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   321
    this.after(&#x27;*:change&#x27;, this.render, this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   322
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   323
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   324
  ...</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   325
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 <code>modelChange</code> listener is not strictly necessary, but it does make your code more robust.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   329
If you decide to swap in another model instance sometime after initialization,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   330
this listener ensures that the new model gets wired up properly to the view.  
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   331
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   332
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   333
<h3 id="view-properties">View Properties</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   334
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
The following properties are meaningful to View classes and subclasses.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   337
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   338
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   339
<table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   340
  <thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   341
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   342
      <th>Property</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   343
      <th>Default Value</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   344
      <th>Description</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   345
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   346
  </thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   347
  <tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   348
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   349
      <td><code>containerTemplate</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   350
      <td><code>&#x27;&lt;div&#x2F;&gt;&#x27;</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   351
      <td>
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
        HTML template for this view's container element. This will be used to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   354
        create the container if no custom container is specified when the view
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   355
        is created.
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>events</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   362
      <td><code>{}</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
          A map of CSS selectors to DOM events that should be handled by your view. Under the hood, event delegation is used so that the actual events are attached to the view's container element. This means you can freely re-render the contents of the container without having to worry about detaching and re-attaching events.
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
        See <a href="#handling-dom-events">Handling DOM Events</a> for more details.
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
      </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   372
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   373
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   374
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   375
      <td><code>template</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   376
      <td><code>&#x27;&#x27;</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   377
      <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   378
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   379
        Reference to a template for this view.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   380
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   381
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
        This is a convenience property that has no default behavior of its own. It's only provided as a convention to allow you to store whatever you wish to use as a template, whether that's an HTML string, a <code>Y.Node</code> instance, a Mustache template, or anything else your heart desires.
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
        How this template gets used is entirely up to you and your custom <code>render()</code> method. See <a href="#rendering-a-view">Rendering a View</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
      </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   390
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   391
  </tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   392
</table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   393
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   394
<p class="tip">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   395
The View class uses both properties and attributes. What's the difference? In short, properties are best for storing data that might be useful to multiple instances of a View, whereas attributes are best for storing data that pertains only to a specific instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   396
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   397
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   398
<h3 id="view-attributes">View Attributes</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   399
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   400
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   401
View classes and subclasses provide the following attributes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   402
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   403
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   404
<table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   405
  <thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   406
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   407
      <th>Attribute</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   408
      <th>Default Value</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   409
      <th>Description</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   410
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   411
  </thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   412
  <tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   413
    <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   414
      <td><code>container</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   415
      <td><code>&lt;div&gt;</code> Node</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   416
      <td>
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
        A DOM element, <code>Y.Node</code> instance, or selector string representing an element that will contain the view's rendered content. The view's DOM events will be attached to this container so that they don't have to be re-attached if the view is re-rendered.
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
        If you specify a container element that isn't already on the page, then you'll need to append it to the page yourself. You can do this in the <code>render()</code> method the first time the view is rendered.
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
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   425
        <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   426
        Note that if you are extending a view and want to set a default value for the <code>container</code> attribute in <code>ATTRS</code>, you must use <code>valueFn</code>:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   427
        </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   428
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   429
<pre class="code prettyprint">ATTRS: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   430
    container: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   431
        valueFn: function () { &#x2F;* return a Y.Node *&#x2F; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   432
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   433
}</pre>
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's constructor will ignore any assignments using the <code>value</code> property. The reason for this is that <code>container</code> already supplies its own <code>valueFn</code>, which <a href="/yui/docs/attribute/#configuration">takes priority over <code>value</code></a>.
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
      </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   439
    </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   440
  </tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   441
</table>
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
Views also support ad-hoc attributes, meaning you can simply pass an object hash to a view's constructor and attributes will automatically be created for the keys you specify.
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
<pre class="code prettyprint">&#x2F;&#x2F; Instantiate a view and setting some ad-hoc attributes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   448
var view = new Y.View({foo: &#x27;foo&#x27;, bar: &#x27;bar&#x27;});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   449
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   450
view.get(&#x27;foo&#x27;); &#x2F;&#x2F; =&gt; &quot;foo&quot;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   451
view.get(&#x27;bar&#x27;); &#x2F;&#x2F; =&gt; &quot;bar&quot;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   452
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   453
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   454
<h3 id="handling-dom-events">Handling DOM Events</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   455
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   456
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   457
The <code>events</code> property of a view class allows you to specify a mapping of CSS selectors to DOM events that should be handled by your view.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   458
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   459
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   460
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   461
Under the hood, event delegation is used so that the actual events are attached to the view's container element. This means you can freely re-render the contents of the container without having to worry about detaching and re-attaching events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   462
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   463
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   464
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   465
Event handlers may be specified as functions or as strings that map to function names on the view instance or its prototype.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   466
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   467
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   468
<pre class="code prettyprint">var Y.MyView = Y.Base.create(&#x27;myView&#x27;, Y.View, [], {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   469
  events: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   470
    &#x2F;&#x2F; Call &#x60;this.toggle()&#x60; whenever the element with the id &quot;toggle-button&quot;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   471
    &#x2F;&#x2F; is clicked.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   472
    &#x27;#toggle-button&#x27;: {click: &#x27;toggle&#x27;},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   473
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   474
    &#x2F;&#x2F; Call &#x60;this.hoverOn()&#x60; when the mouse moves over any element with the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   475
    &#x2F;&#x2F; &quot;hoverable&quot; class, and &#x60;this.hoverOff()&#x60; when the mouse moves out of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   476
    &#x2F;&#x2F; any element with the &quot;hoverable&quot; class.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   477
    &#x27;.hoverable&#x27;: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   478
        mouseover: &#x27;hoverOn&#x27;,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   479
        mouseout : &#x27;hoverOff&#x27;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   480
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   481
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   482
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   483
  hoverOff: function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   484
    &#x2F;&#x2F; ... handle the mouseout event ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   485
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   486
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   487
  hoverOn: function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   488
    &#x2F;&#x2F; ... handle the mouseover event ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   489
  },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   490
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   491
  toggle: function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   492
    &#x2F;&#x2F; ... handle the click event ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   493
  }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   494
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   495
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   496
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   497
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   498
The <code>this</code> object in view event handlers will always refer to the current view instance. If you'd prefer <code>this</code> to refer to something else, use <code>Y.bind()</code> to bind a custom <code>this</code> object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   499
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   500
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   501
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   502
At instantiation time, you can provide an <code>events</code> config property to add or override event handlers for individual view instances.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   503
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   504
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   505
<pre class="code prettyprint">&#x2F;&#x2F; Overriding or adding event handlers on a per-instance basis.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   506
var myView = new Y.MyView({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   507
  events: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   508
    &#x2F;&#x2F; Replace the #toggle-button click handler with a custom one.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   509
    &#x27;#toggle-button&#x27;: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   510
      click: function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   511
        &#x2F;&#x2F; ... custom click handler ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   512
      }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   513
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   514
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   515
    &#x2F;&#x2F; Add a handler for focus events on elements with the &quot;focusable&quot; class.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   516
    &#x27;.focusable&#x27;: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   517
      focus: function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   518
        &#x2F;&#x2F; ... custom focus handler ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   519
      }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   520
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   521
  }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   522
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   523
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   524
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   525
<h3 id="rendering-a-view">Rendering a View</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   526
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   527
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   528
A view's default <code>render()</code> method is completely empty. It's up to you to override this method and fill it with your own rendering logic.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   529
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   530
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   531
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   532
The ultimate goal of your <code>render()</code> function is to put some HTML into the view's container element and ensure that the container is on the page. How you choose to do this is entirely up to you.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   533
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   534
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   535
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   536
You might choose to use plain old DOM manipulation to create the elements for your view, or you might store an HTML string in your view's <code>template</code> property and then render that, or you might even store a full-blown template (perhaps using <a href="http://www.handlebarsjs.com/">Handlebars</a> or <a href="http://mustache.github.com/">Mustache</a>). The View component intentionally avoids dictating how you render things, so you're free to do whatever you like best.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   537
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   538
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   539
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   540
<strong>Note:</strong> 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
   541
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   542
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   543
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   544
In general, it makes sense to <a href="#associating-a-view-with-a-model-or-model-list">associate a view with a Model or Model List instance</a> so that you can update the view when related data changes. You can do this either by re-rendering the entire view (this is the easiest way) or by modifying only the parts of the view that have changed (harder, but possibly more performant).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   545
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   546
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   547
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   548
Again, which route you choose to take is entirely up to you.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   549
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   550
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   551
<h3 id="associating-a-view-with-a-model-or-model-list">Associating a View with a Model or Model List</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   552
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   553
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   554
When instantiating a view, you may pass a <code>model</code> attribute in the config object that references a <a href="../model/index.html">Model</a> instance you wish to associate with the view.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   555
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   556
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   557
<pre class="code prettyprint">&#x2F;&#x2F; Associate a PieModel instance with a PieView instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   558
var pie     = new Y.PieModel({type: &#x27;apple&#x27;}),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   559
    pieView = new Y.PieView({model: pie});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   560
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   561
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
This attribute is entirely optional. There's no requirement that views be associated with models, but if you do intend to associate your view with a model, then specifying that model instance at instantiation time will cause a reference to be stored for convenience.
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
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   566
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   567
There's no special magic under the hood that will link the model to your view; you'll still need to manually subscribe to any model events you want to handle in your view's <code>initializer()</code> function (see the example in <a href="#extending-yview">Extending <code>Y.View</code></a>).
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
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
Instead of specifying a model association, you could also choose to associate your view with a <a href="../model-list/index.html">Model List</a>, or even with nothing at all. It's entirely up to you.
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
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
To associate a view with a <a href="../model-list/index.html">Model List</a> instead of a Model, use the <code>modelList</code> config attribute. In your view's initializer, attach event listeners to list events to re-render the view when the list's contents change or when the data of one of the models in the list changes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   576
</p>
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">&#x2F;&#x2F; Create a custom View subclass that&#x27;s associated with a Model List.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   579
var Y.PieListView = Y.Base.create(&#x27;pieListView&#x27;, Y.View, [], {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   580
  &#x2F;&#x2F; ... other prototype properties and methods ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   581
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   582
  initializer: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   583
    var list = this.get(&#x27;modelList&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   584
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   585
    &#x2F;&#x2F; Re-render this view when a model is added to or removed from the model
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   586
    &#x2F;&#x2F; list.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   587
    list.after([&#x27;add&#x27;, &#x27;remove&#x27;, &#x27;reset&#x27;], this.render, this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   588
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   589
    &#x2F;&#x2F; We&#x27;ll also re-render the view whenever the data of one of the models in
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   590
    &#x2F;&#x2F; the list changes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   591
    list.after(&#x27;*:change&#x27;, this.render, this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   592
  }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   593
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   594
  &#x2F;&#x2F; ... other prototype properties and methods ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   595
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   596
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   597
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   598
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   599
Then pass in a Model List instance when instantiating your view.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   600
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   601
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   602
<pre class="code prettyprint">var pies        = new Y.PieList(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   603
    pieListView = new Y.PieListView({modelList: pies});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   604
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   605
&#x2F;&#x2F; When we add a pie to the list, the view will be re-rendered.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   606
pies.add({type: &#x27;banana cream&#x27;});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   607
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   608
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   609
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   610
The <code>model</code> and <code>modelList</code> attributes are really just ad-hoc attributes that are created on demand, so using "model" and "modelList" as the names is just a convention and not a baked-in requirement. Feel free to store your models and model lists under different attribute names if you want.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   611
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   612
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   613
<h2 id="view-extensions">View Extensions</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   614
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   615
<h3 id="yviewnodemap">Y.View.NodeMap</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   616
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   617
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   618
The <a href="http://yuilibrary.com/yui/docs/api/classes/View.NodeMap.html">NodeMap</a> extension adds a static <code>getByNode()</code> method to a View subclass that returns the View instance associated with a given Node instance (much like <code>Y.Widget.getByNode()</code> does for widgets). The Node may be a View container or a child of a View container.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   619
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   620
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   621
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   622
This functionality is provided by an optional extension because it requires you to manually call <code>destroy()</code> on your views when you're done using them in order to avoid memory leaks due to long-lived internal references.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   623
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   624
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   625
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   626
To use this extension, load the <code>view-node-map</code> module and pass <code>Y.View.NodeMap</code> in the extensions array when creating a View subclass.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   627
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   628
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   629
<pre class="code prettyprint">&lt;div id=&quot;container&quot;&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   630
  &lt;div id=&quot;child&quot;&gt;&lt;&#x2F;div&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   631
&lt;&#x2F;div&gt;
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;script&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   634
YUI().use(&#x27;view&#x27;, &#x27;view-node-map&#x27;, function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   635
  &#x2F;&#x2F; Create a custom View subclass that mixes in the Y.View.NodeMap extension.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   636
  Y.PieView = Y.Base.create(&#x27;pieView&#x27;, Y.View, [Y.View.NodeMap]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   637
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   638
  &#x2F;&#x2F; Create a new instance of the custom View.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   639
  var pieView = new Y.PieView({container: &#x27;#container&#x27;});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   640
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   641
  &#x2F;&#x2F; Look up the View instance by its container.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   642
  Y.PieView.getByNode(&#x27;#container&#x27;); &#x2F;&#x2F; returns the pieView instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   643
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   644
  &#x2F;&#x2F; ...or by a child of its container.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   645
  Y.PieView.getByNode(&#x27;#child&#x27;); &#x2F;&#x2F; also returns the pieView instance
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   646
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   647
&lt;&#x2F;script&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   648
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   649
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   650
<h2 id="views-vs-widgets">Views vs. Widgets</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   651
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   652
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   653
While <code>Y.View</code> and <a href="../widget/index.html"><code>Y.Widget</code></a> may seem similar on the surface, they're intended for different purposes, even though they have some overlap.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   654
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   655
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   656
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   657
In a nutshell: a view is meant to be used as an internal piece of a component or application, and is not intended to be exposed to external developers as an API or a reusable component itself. A widget, on the other hand, is meant to be a reusable component with a public API.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   658
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   659
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   660
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   661
Views are well suited for rendering portions of web pages, whether large or small, since they're lightweight and can be easily associated with Models and Model Lists. A view may even be responsible for creating and rendering widgets on a page, but the view is an internal piece of an application or component and is not meant to be used externally.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   662
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   663
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   664
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   665
Widgets are well suited for representing self-contained interactive controls or objects that behave like first-class HTML elements. A widget might actually use views to provide a visual representation and even handle some DOM events &mdash; but only as internal plumbing. The widget itself is responsible for providing a reusable public API.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   666
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   667
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   668
            </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   669
        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   670
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   671
        <div class="yui3-u-1-4">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   672
            <div class="sidebar">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   673
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   674
                    <div id="toc" class="sidebox">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   675
                        <div class="hd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   676
                            <h2 class="no-toc">Table of Contents</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   677
                        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   678
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   679
                        <div class="bd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   680
                            <ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   681
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   682
<a href="#getting-started">Getting Started</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   683
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   684
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   685
<a href="#upgrading-from-yui-34x">Upgrading from YUI 3.4.x</a>
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
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   688
<a href="#using-view">Using View</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   689
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   690
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   691
<a href="#instantiating-view">Instantiating View</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   692
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   693
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   694
<a href="#extending-yview">Extending <code>Y.View</code></a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   695
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   696
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   697
<a href="#views-models-and-addtarget">Views, Models, and <code>addTarget()</code></a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   698
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   699
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   700
<a href="#view-properties">View Properties</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   701
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   702
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   703
<a href="#view-attributes">View Attributes</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   704
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   705
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   706
<a href="#handling-dom-events">Handling DOM Events</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   707
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   708
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   709
<a href="#rendering-a-view">Rendering a View</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   710
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   711
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   712
<a href="#associating-a-view-with-a-model-or-model-list">Associating a View with a Model or Model List</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   713
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   714
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   715
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   716
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   717
<a href="#view-extensions">View Extensions</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   718
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   719
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   720
<a href="#yviewnodemap">Y.View.NodeMap</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   721
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   722
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   723
</li>
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
<a href="#views-vs-widgets">Views vs. Widgets</a>
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
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   728
                        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   729
                    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   730
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   731
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   732
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   733
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   734
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   735
                    <div class="sidebox">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   736
                        <div class="hd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   737
                            <h2 class="no-toc">Examples That Use This Component</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   738
                        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   739
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   740
                        <div class="bd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   741
                            <ul class="examples">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   742
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   743
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   744
                                        <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
   745
                                            <a href="../app/app-todo.html">Todo List</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   746
                                        </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   747
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   748
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   749
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   750
                                        <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
   751
                                            <a href="../app/app-contributors.html">GitHub Contributors</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   752
                                        </li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   753
                                    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   754
                                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   755
                            </ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   756
                        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   757
                    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   758
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   759
            </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   760
        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   761
    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   762
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   763
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   764
<script src="../assets/vendor/prettify/prettify-min.js"></script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   765
<script>prettyPrint();</script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   766
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   767
<script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   768
YUI.Env.Tests = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   769
    examples: [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   770
    project: '../assets',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   771
    assets: '../assets/view',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   772
    name: 'view',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   773
    title: 'View',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   774
    newWindow: '',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   775
    auto:  false 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   776
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   777
YUI.Env.Tests.examples.push('app-todo');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   778
YUI.Env.Tests.examples.push('app-contributors');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   779
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   780
</script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   781
<script src="../assets/yui/test-runner.js"></script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   782
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   783
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   784
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   785
</body>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   786
</html>