From a99e408bd109783561d408ef34c286cdd9b51845 Mon Sep 17 00:00:00 2001 From: Armin Ronacher Date: Mon, 19 Apr 2010 15:59:16 +0200 Subject: [PATCH] Finished jQuery example documentation. --- docs/patterns/jquery.rst | 110 ++++++++++++++++++- examples/jqueryexample/templates/index.html | 12 +- examples/jqueryexample/templates/layout.html | 10 ++ 3 files changed, 119 insertions(+), 13 deletions(-) create mode 100644 examples/jqueryexample/templates/layout.html diff --git a/docs/patterns/jquery.rst b/docs/patterns/jquery.rst index cb5aa234..8d00f54e 100644 --- a/docs/patterns/jquery.rst +++ b/docs/patterns/jquery.rst @@ -6,7 +6,16 @@ with the DOM and JavaScript in general. It is the perfect tool to make web applications more dynamic by exchanging JSON between server and client. +JSON itself is a very lightweight transport format, very similar to how +Python primitives (numbers, strings, dicts and lists) look like which is +widely supported and very easy to parse. It became popular a few years +ago and quickly replaced XML as transport format in web applications. + +If you have Python 2.6 JSON will work out of the box, in Python 2.5 you +will have to install the `simplejson`_ library from PyPI. + .. _jQuery: http://jquery.com/ +.. _simplejson: http://pypi.python.org/pypi/simplejson Loading jQuery -------------- @@ -14,15 +23,27 @@ Loading jQuery In order to use jQuery, you have to download it first and place it in the static folder of your application and then ensure it's loaded. Ideally you have a layout template that is used for all pages where you just have -to add two script statements to your `head` section. One for jQuery, and -one for your own script (called `app.js` here): +to add a script statement to your `head` to load jQuery: .. sourcecode:: html - + url_for('static', filename='jquery.js') }}"> + +Another method is using Google's `AJAX Libraries API +`_ to load jQuery: + +.. sourcecode:: html + + + +In this case you don't have to put jQuery into your static folder, it will +instead be loaded from Google directly. This has the advantage that your +website will probably load faster for users if they were to at least one +other website before using the same jQuery version from Google because it +will already be in the browser cache. Downside is that if you don't have +network connectivity during development jQuery will not load. Where is My Site? ----------------- @@ -57,3 +78,82 @@ inside a `script` block here where different rules apply. This also means that there must never be any `` + $(function() { + $('a#calculate').bind('click', function() { + $.getJSON($SCRIPT_ROOT + '/_add_numbers', { + a: $('input[name="a"]').val(), + b: $('input[name="b"]').val() + }, function(data) { + $("#result").text(data.result); + }); + return false; + }); + }); + +

jQuery Example

+

+ + = + ? +

calculate server side + +I won't got into detail here about how jQuery works, just a very quick +explanation of the little bit of code above: + +1. ``$(function() { ... })`` specifies code that should run once the + browser is done loading the basic parts of the page. +2. ``#('selector')`` selects an element and lets you operate on it. +3. ``element.bind('event', func)`` specifies a function that should run + when the user clicked on the element. If that function returns + `false`, the default behaviour will not kick in (in this case, navigate + to the `#` URL). +4. ``$.getJSON(url, data, func)`` sends a `GET` request to `url` and will + send the contents of the `data` object as query parameters. Once the + data arrived, it will call the given function with the return value as + argument. Note that we can use the `$SCRIPT_ROOT` variable here that + we set earlier. + +If you don't get the whole picture, download the `sourcecode +for this example +`_ +from github. diff --git a/examples/jqueryexample/templates/index.html b/examples/jqueryexample/templates/index.html index 6114ae73..0545516d 100644 --- a/examples/jqueryexample/templates/index.html +++ b/examples/jqueryexample/templates/index.html @@ -1,12 +1,6 @@ - -jQuery Example - - +{% extends "layout.html" %} +{% block body %} @@ -23,3 +18,4 @@ = ?

calculate server side +{% endblock %} diff --git a/examples/jqueryexample/templates/layout.html b/examples/jqueryexample/templates/layout.html new file mode 100644 index 00000000..0b5f3a7e --- /dev/null +++ b/examples/jqueryexample/templates/layout.html @@ -0,0 +1,10 @@ + +jQuery Example + + + +{% block body %}{% endblock %}