[Pkg-javascript-commits] [backbone] 69/101: through render
Jonas Smedegaard
js at moszumanska.debian.org
Sat May 3 16:58:30 UTC 2014
This is an automated email from the git hooks/post-receive script.
js pushed a commit to tag 0.1.0
in repository backbone.
commit e2cc0307997d082df9d428cd6bf5784f375bee28
Author: Jeremy Ashkenas <jashkenas at gmail.com>
Date: Tue Oct 12 15:27:54 2010 -0400
through render
---
index.html | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
1 file changed, 73 insertions(+), 4 deletions(-)
diff --git a/index.html b/index.html
index 9cd9d51..faf6ef4 100644
--- a/index.html
+++ b/index.html
@@ -128,6 +128,9 @@
<body>
<div id="sidebar" class="interface">
+ <a class="toc_title" href="#">
+ Backbone.js
+ </a>
<a class="toc_title" href="#Introduction">
Introduction
</a>
@@ -190,6 +193,7 @@
View
</a>
<ul class="toc_section">
+ <li>– <a href="View-el">el</a></li>
<li>– <a href="View-jQuery">$ (jQuery)</a></li>
<li>– <a href="View-render">render</a></li>
<li>– <a href="View-make">make</a></li>
@@ -828,13 +832,15 @@ var Notes = Backbone.Collection.extend({
</p>
<pre class="runnable">
-var list = new Backbone.Collection([
- new Backbone.Model({name: "Moe"}),
+var stooges = new Backbone.Collection([
new Backbone.Model({name: "Curly"}),
- new Backbone.Model({name: "Larry"})
+ new Backbone.Model({name: "Larry"}),
+ new Backbone.Model({name: "Moe"})
]);
-alert(JSON.stringify(list.pluck("name")));
+var names = stooges.pluck("name");
+
+alert(JSON.stringify(names));
</pre>
<h2 id="Sync">Backbone.sync</h2>
@@ -858,7 +864,70 @@ alert(JSON.stringify(list.pluck("name")));
<li><b>error({model: ...})</b> – a callback that should be fired if the request fails</li>
</ul>
+ <h2 id="View">Backbone.View</h2>
+
+ <p>
+ Backbone views are almost more convention than they are code.
+ The general idea is to organize your interface into logical sections,
+ backed by models, each of which can be updated independently when the
+ model changes. Instead of digging into a JSON object and looking up an
+ element in the DOM, and updating the HTML by hand, it should look more like:
+ <tt>model.bind('change', view.render)</tt> — and now everywhere that
+ model data is displayed in the UI, it is always immediately up to date.
+ </p>
+
+ <p id="View-el">
+ <b class="header">el</b><code>view.el</code>
+ <br />
+ All views have a DOM element at all times (the <b>el</b> property),
+ whether they've already been inserted into the page or not. In this
+ fashion, views can be rendered at any time, and inserted into the DOM all
+ at once, in order to get high-performance UI rendering with as few
+ reflows and repaints as possible.
+ </p>
+
+ <p id="View-jQuery">
+ <b class="header">$ (jQuery)</b><code>view.$(selector)</code>
+ <br />
+ If jQuery is included on the page, each view has a <b>$</b> or <b>jQuery</b>
+ function that runs queries scoped within the view's element. If you use this
+ scoped jQuery function, you don't have to use model ids as part of your query
+ to pull out specific elements in a list, and can rely much more on HTML class
+ attributes. It's equivalent to running: <tt>$(selector, this.el)</tt>
+ </p>
+<pre>
+ui.Chapter = Backbone.View.extend({
+ serialize : function() {
+ return {
+ title: this.$(".title").text(),
+ start: this.$(".start-page").text(),
+ end: this.$(".end-page").text()
+ };
+ }s
+});
+</pre>
+
+ <p id="View-render">
+ <b class="header">render</b><code>view.render()</code>
+ <br />
+ The default implementation of <b>render</b> is a no-op. Override this
+ function with your code that renders the view template from model data,
+ and updates <tt>this.el</tt> with the new HTML. You can use any flavor of
+ JavaScript templating or DOM-building you prefer. Because <b>Underscore.js</b>
+ is already on the page, <tt>_.template</tt> is available. The convention is to
+ <tt>return this</tt> at the end of <b>render</b> to enable chaining.
+ </p>
+
+<pre>
+ui.Chapter = Backbone.View.extend({
+ render : function() {
+ var data = this.model.attributes();
+ $(this.el).html(this.template.render(data));
+ return this;
+ }
+});
+</pre>
<h2 id="changes">Change Log</h2>
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/backbone.git
More information about the Pkg-javascript-commits
mailing list