Ajax on Rails

Werbung
Ajax on
he
sc e
ut ab
De usg
A
Dynamische Web-Anwendungen
mit Ruby on Rails
Rails
O’REILLY
Scott Raymond
Deutsche Übersetzung von Thomas Demmig
First
Inhalt
1
2
3
4
Max.
Linie
Vorwort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IX
Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
Für wen dieses Buch gedacht ist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Was Ajax ist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Was Rails ist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
»Was macht dein Ajax in meinem Rails?« . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
In Fahrt kommen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
2
10
13
14
19
Die ersten Schritte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
Der klassische Weg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
JavaScript-Bibliotheken und Prototype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Rails mit ins Spiel bringen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
26
29
34
Einführung in Prototype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
Vorbereitungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ajax-Verweise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Formulare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ajax-Formulare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Buttons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Formular-Observer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
39
44
47
49
51
53
Einführung in script.aculo.us . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
Visuelle Effekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Drag-and-Drop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
60
70
Inhalt | V
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Max.
Linie
Links
5
6
RJS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
71
Anweisungen statt Daten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Das R in RJS stecken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ein reales Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
71
72
88
89
Ajax Usability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
91
Prinzipien der Usability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Der Web-Kontext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Usability im Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Plattformübergreifende Entwicklung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
7
Testen und Debuggen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Debuggen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Testen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
8
Sicherheit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Gesunde Skepsis: Traue keiner Benutzereingabe . . . . . . . . . . . . . . . . . . . . . . . .
Passwörter hashen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Logs stummschalten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Same-Origin-Regel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Nutzung und Missbrauch der HTTP-Methoden . . . . . . . . . . . . . . . . . . . . . . . .
Verschlüsselung und Sicherheitszertifikate . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Rails Security Mailing List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
145
155
157
158
160
163
165
165
Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Entwicklungs- und produktive Umgebungen . . . . . . . . . . . . . . . . . . . . . . . . . . .
Session-Verwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Output Caching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Asset Packaging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Behandlung langlaufender Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
167
167
169
175
177
179
10 Prototype-Referenz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
Ajax-Unterstützung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
DOM-Manipulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Erweiterungen der Basis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
Max.
Linie
VI |
Inhalt
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Max.
Linie
Rechts
11 script.aculo.us-Referenz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
Visuelle Effekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Drag-and-Drop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Element-Erweiterungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
DOM-Builder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
JavaScript-Unit-Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Hilfsmethoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
223
233
244
253
255
256
259
A
Review Quiz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
B
Foto-Galerie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
C
Intranet Workgroup Collaboration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
Max.
Linie
Max.
Linie
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Inhalt |
VII
First
Kapitel 3
KAPITEL 3
Einführung in Prototype
Das letzte Kapitel begann mit einer Einführung in Ajax ohne Unterstützung durch eine
Bibliothek, zeigte dann, wie Prototype helfen kann, und endete mit einem Appetithäppchen zu den Hilfsfunktionen von Rails. In diesem Kapitel sowie in den Kapiteln 4 und 5
werden wir uns intensiv mit Prototype und seinen Helpern beschäftigen – von den einfachsten Verweisen bis hin zu vollständigen interaktiven Komponenten mit visuellen
Effekten. Dieses Kapitel konzentriert sich auf die Helper, die mit Prototype interagieren,
um Ajax-unterstützte Verweise und Formulare zu erstellen. Eine vollständige Referenz
aller Fähigkeiten von Prototype finden Sie in Kapitel 10.
Vorbereitungen
Für die Beispiele in diesem Kapitel werden wir die Rails-Anwendung wiederverwenden,
die wir in Kapitel 2 erstellt haben, aber diesmal mit einem neuen Controller. Also zurück
zur Kommandozeile:
script/generate controller chapter3 get_time repeat reverse
Diese Anweisung generiert einen Controller chapter3 mit vier Actions: index, get_time,
repeat und reverse. Werfen Sie einen Blick auf http://localhost:3000/chapter3, um eine
ganz einfache View zu sehen (siehe Abbildung 3-1).
Im vorigen Kapitel haben wir die Beispiel-Views so einfach wie möglich gehalten. Dieses
Mal wollen wir sie ein wenig mit einem HTML-Layout und einer CSS-Datei aufbrezeln.
Erstellen Sie zunächst eine neue Layout-Datei, app/views/layouts/application.rhtml, und
tragen Sie dort ein einfaches XHTML-Template ein:
Max.
Linie
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Ajax on Rails</title>
Max.
Linie
| 35
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Links
<%= javascript_include_tag :defaults %>
<%= stylesheet_link_tag "application" %>
</head>
<body>
<h1>Ajax on Rails</h1>
<%= yield %>
</body>
</html>
Abbildung 3-1: Ein neuer Controller
Für unsere Zwecke gibt es zwei wichtige Elemente. Das erste ist javascript_include_tag
:defaults, das Prototype und script.aculo.us einbindet (genauer gesagt prototype.js,
effects.js, dragdrop.js und controls.js), aber auch application.js, wenn es vorhanden ist.
Das zweite Element ist yield – dort wird der Inhalt Ihrer Action-Templates eingefügt.
Um das Ganze etwas hübscher zu gestalten, wollen wir eine einfache CSS-Datei public/
stylesheets/application.css anlegen:
Max.
Linie
body {
background-color: #eee;
color: #222;
font-family: trebuchet;
padding: 0;
margin: 25px;
}
h1 {
margin: -25px -25px 20px -25px;
padding: 50px 0 8px 25px;
border-bottom: 3px solid #666;
background-color: #777;
color: #fff;
font: normal 28pt georgia;
text-shadow: black 0px 0px 5px;
}
a { color: #229; }
.box {
border: 1px solid;
36 | Kapitel 3: Einführung in Prototype
Max.
Linie
Rechts
width: 100px; height: 100px;
padding: 5px;
font-size: .6em;
letter-spacing: .1em;
text-transform: uppercase;
margin-bottom: 20px;
}
.pink {
border-color: #f00;
background-color: #fcc;
}
.green {
border-color: #090;
background-color: #cfc;
}
.hover {
border-width: 5px;
padding: 1px;
}
ul {
background-color: #ccc;
padding: 5px 0 5px 30px;
}
Nun wollen wir dem Controller ein wenig Leben einhauchen. Bearbeiten Sie app/controllers/chapter3_controller.rb und definieren Sie ein paar Actions, die wir später nutzen
werden:
class Chapter3Controller < ApplicationController
def get_time
sleep 1.second
render :text => Time.now
end
def repeat
render :text => params.inspect
end
def reverse
@reversed_text = params[:text_to_reverse].reverse
end
end
Im nächsten Schritt wollen wir ein einfaches View-Template app/views/chapter3/index.
rhtml anlegen. Es besteht nur aus einer Zeile:
<%= link_to "Zeit anzeigen", :action => 'get_time' %>
Max.
Linie
Dabei wird der Helper link_to verwendet, der im letzten Kapitel vorgestellt wurde. Das
Ergebnis des Helpers ist wirklich einfach:
<a href="/chapter3/get_time">Zeit anzeigen</a>
Vorbereitungen
| 37
Max.
Linie
Links
Aktualisieren Sie die Seite in Ihrem Browser, damit Sie in etwa das erhalten, was Sie auch
in Abbildung 3-2 sehen. Klicken Sie auf den Verweis, damit die Action get_time die aktuelle Zeit als einfachen Text rendert.
Abbildung 3-2: Index-Template
Der Helper link_to besitzt ein paar Optionen, die erwähnenswert sind. Zuallererst
ermöglicht Ihnen die Option :confirm, ein Bestätigungsfenster per JavaScript auszugeben, so dass der Anwender die Aktion abbrechen kann, bevor sie gestartet wird. Stellen
Sie sich zum Beispiel vor, dass Sie einen Verweis haben, der eine potenziell gefährliche
Aktion ausführt:
<%= link_to "Rakete abfeuern", { :action => 'fire' },
:confirm => "Sind Sie wirklich sicher?" %>
Mit diesem bescheidenen Schutz hat der Benutzer die Möglichkeit Abbrechen anzuklicken,
um die Aktion abzubrechen.
Außerdem ermöglicht Ihnen die Option :method, eine HTTP-Methode für den Verweis
anzugeben – :get, :post, :put oder :delete. Vielleicht wird Sie diese Option ein wenig
überraschen – schließlich können normale Verweise nur HTTP GET nutzen und Formulare verstehen nur GET oder POST. Wie macht Rails das dann? Nun, es schummelt. Um
zu sehen, was ich meine, erstellen Sie wie folgt einen Verweis mit der Option :method:
<%= link_to "Löschen", "/people/1", :method => :delete %>
Max.
Linie
Wenn Sie sich den Quelltext anschauen, der durch den Helper erzeugt wird, werden Sie
ungefähr Folgendes sehen:
38 | Kapitel 3: Einführung in Prototype
Max.
Linie
Rechts
<a href="/people/1"
onclick="var f = document.createElement('form');
f.style.display = 'none';
this.parentNode.appendChild(f);
f.method = 'POST';
f.action = this.href;
var m = document.createElement('input');
m.setAttribute('type', 'hidden');
m.setAttribute('name', '_method');
m.setAttribute('value', 'delete');
f.appendChild(m);
f.submit( );
return false;">Löschen</a>
Der Code ignoriert das normale Verhalten von Verweisen. Stattdessen wird beim Anklicken hinter den Kulissen ein Formular dynamisch erzeugt und abgeschickt. Für sich
ermöglicht dieser Hack nur, POST-Anfragen abzuschicken. Was ist mit PUT und
DELETE? Um das zu erreichen, setzt Rails auf die POST-Methode auf. Wie Sie im generierten JavaScript sehen können, wird dem verborgenen Formular ein Feld namens _method
hinzugefügt. Wenn Rails diesen Parameter auf der Serverseite erhält, wird die Anfrage so
interpretiert, als ob diese Methode verwendet wird.
Dadurch ist es mit Hilfe eines kleinen Hacks möglich, Verweise zu erstellen, die die Vorteile des gesamten Spektrums der HTTP-Methoden ausnutzen können. Die Gründe für die
Verwendung der korrekten HTTP-Methoden werden ausführlich in Kapitel 6 behandelt.
Ajax-Verweise
Jetzt haben wir eine ordentliche Grundlage, so dass wir dem Ganzen nun etwas Ajax hinzufügen können. Ändern Sie Ihr Template index.html, damit es so aussieht:
<%= link_to_remote "Zeit anzeigen",
:update => 'current_time',
:url
=> { :action => 'get_time' } %>
<div id="current_time"></div>
Wir haben link_to in link_to_remote umgeändert und eine neue Option :update hinzugefügt. Der Wert von :update verweist auf eine ID eines HTML-Elements, in das die Antwort von Ajax eingefügt werden soll – in diesem Fall ein DIV. Der erzeugte HTML-Code
sieht so aus:
<a href="#"
onclick="new Ajax.Updater('current_time', '/chapter3/get_time',
{asynchronous:true, evalScripts:true});
return false;">Zeit anzeigen</a>
<div id="current_time"></div>
Max.
Linie
Wenn Sie sich den generierten HTML-Code anzeigen lassen, werden Sie sehen, dass
Ajax.Updater von Prototype verwendet wird. Alle Ajax-Helper von Rails funktionieren auf
Ajax-Verweise | 39
Max.
Linie
First
Index
Symbole
$( )-Methode 79
37signals 13
A
Max.
Linie
Action Caching 169, 171
Filter-Verarbeitung und 172
ActionController 19
ActionPack und Debuggen 122
ActionView 19
ActiveRecord 18, 19, 168
Rails-Konsole verwenden mit 120
und Debuggen 120
ActiveRecordStore und Performance 168
Adressleiste, Navigieren über 101
Agile Entwicklungs-Methoden 140
Ajax
Asynchron 8
Beispiele 21–34
Formulare 47
Geschichte von 7
JavaScript 8
Leichtigkeit 4
Modell, das 3
Proxy erstellen 158
Reaktion auf Web-Performance 3
Schicht, versus User-Interface-Schicht 4
Überblick 2–9
Unterstützung 182–189
Anfragen 183
Basis-Objekte 182
globale Responder 189
Updater 186
Usability 101
versus klassischer Anfrageverlauf 4
Verweise 39
Websicherheit und 145
XML 9
XMLHttpRequest 8
Ajaxifizierte Sortables 66
Ajax-Navigation 101
Aktualisieren versus Ersetzen 6
API, ActiveRecord 122
Apple 1
Application Trace 116
ARTS (Another RJS Testing System) Plugin 133
Assert Packager Plugin 176
assert_valid_markup Rails Plugin 135
asset packaging 175
Assoziationen 19
asynchrone Anfragen 26
Automatisiertes Testen 114
Autovervollständigen 244
B
BackgrounDRb Plugin 177
Backpack 13
Basecamp 11
Basiserweiterungen 205, 218, 219
Bedeutung von Farben 97
Beobachten eines Feldes 51
Beobachten eines ganzen Formulars 53
Berners-Lee, Tim 6, 100
Beschränkung auf eine Domäne 158
Blockieren 26
Breakpoints 123
Max.
Linie
| 355
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Links
Button 49
für eigene Funktionen 50
button_to_function 50
C
Cache Sweepers 175
Caching, Einschränkungen 170
Callbacks 19, 40, 58
CamelCase verwenden 60
Camino 55
Card Validation Value (CVV) und Audits 157
Cascading Style Sheets (CSS) 9
Code
Beispiele XI
Collection Proxies (RJS) 79
Constraint 67
Containment 68
Cookies, Feed Reader und 169
Cross Site Cooking und Sicherheit 153
Cross-Site Scripting (XSS) 154
CRUD Rails-Actions 132
CSS (Cascading Style Sheets) 9, 129
CVV (Card Validation Value) 157
D
Max.
Linie
Daten im Speicher puffern 168
Daten-Mapper 19
Datensatz-IDs 146
in URLs 148
David Siegel, Zeitalter des 7
Debuggen 115–130
ActionPack 122
ActiveRecord 120
Application Trace 116
Breakpoints 123
Framework Trace 117
Inspektoren 125–130
Debug Helper 125
FireBug (Firefox-Erweiterung) 127
RJS-Debugging-Modus 125
Routing Navigator 127
instance_variables (Methode) 124
Integration Session 122
Interactive Ruby (Irb) 119
interaktive Shell (Konsole) 119
Introspektion 120
356 | Index
Logdateien 117
Logger 117
Nachrichten 115
print-Anweisung (puts) 117
Rails Standard-Logger 119
Rails-Ausnahmen 115
Stack Trace 116
tail (Tool) 117
vollständiger Trace 117
Debug-Helper 125
Design-Sichtbarkeit 95
Development Log verwenden 117
Document Object Model (DOM) 9
dokumentenzentriertes Modell 3
DOM (Document Object Model) 9
Domain Specific Languages (DSLs) 72
DOM-Anpassungen 190–205
in der JavaScript-Bibliothek
Prototype 190–205
Don’t Repeat Yourself 13
Draggables 61, 233
Drag-und-Drop-Funktionalität 233
dropOnEmpty 68
Droppables 64, 238
DRY-Prinzip 13
E
ECMAScript 8
Effect (Objekt) 54
Effect-Instanz-Methoden und
-Eigenschaften 228
Effekt-Callbacks 231
Effekt-Queues 231
Effekt-Transitionen 229
eigene Helper 50
Eingabefeld-Kontrolle 190
eingeschränkte Queries verwenden 146
Element-Positionierung 202
Element-Proxies
eigene Methoden 76
Inhalte aktualisieren 77
Embedded Ruby (ERb) 29
ERb (Embedded Ruby) 29
Errors versus Failures beim Testen 132
Erwartungs-Management 93
Exception-Debugging-Screen 115
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Max.
Linie
Rechts
F
H
Fähigkeiten und Usability 109
Farbe, angemessene Verwendung 97
Farbe, Verwendung von 97
FireBug (Firefox-Erweiterung) 127
Firefox 8, 55
form_for 47
form_tag (Helper) 47
Formulare 44, 47
Formular-Helper 47
Formular-Observer 51, 203
Formular-Tag-Helper 44
Formular-Validierung und Sicherheit 151
Foto-Galerie (Anwendung) 280–301
JavaScript und CSS 295
CSS-Stylesheet 297
Photo.show 295
Routen, Controller und Views 283
Alben anzeigen 287
Editier-Formular 286
Hauptlayout 285
Hilfs-Methoden 284, 285
SessionsController 286
Umgebung 284
Schema und Modelle 281
Fragment Caching 169, 173
Cache-Helper 174
Framework 10
Framework Trace 117
Fuchs, Thomas 222
funktionale Tests versus Integrationstests 136
funktionales Testen 131
Handle 66
Hansson, David Heinemeier (DHH) 11
Hash 155
Helper 32
eigene 50
hide( ) und show( ) (Methoden) 41
Hilfs-Nuggets 107
hoverclass 64, 66
HTTP-Methoden
korrekte Verwendung 161
Missbrauch 160
HTTP-Methoden (Verben) 98
HTTP-Sniffing-Tool 98
Hypertext 6
G
Garrett, Jesse James 8
getRequestObject( ) 25
Ghosting 67
Google 1
Google Web Accelerator (GWA) 160
Graceful Degradation 111
gute Benutzererfahrung 55
GWA (Google Web Accelerator) 160
I
IBM 1
Idempotenz versus Sicherheit 98
Inspectoren und Debugging 125–130
instance_variables (Methode) 124
Instanz-Variable 29
Integration Session und Debuggen 122
Interactive Ruby (Irb) 119
Interaktive Shell (Konsole) und Debuggen 119
Internet Explorer 9, 27, 55
Intranet Workgroup Collaboration
Anwendung 311–317
Anwendungs-Ccontroller 311
Hilfsmethoden 312
Navigations-Layout 314
Benutzer 339
Ausgeben und neue hinzufügen 343
Daten bearbeiten 344
neu erstellen 344
Profil bearbeiten 341
Status anzeigen 342
UsersController 339
Dokumente 326–329
ein neues Dokument erstellen 328
eine Datei hochladen 326
JavaScript und CSS 345–354
PostForm (Klasse) 345
Kommentare
CommentsController 319
Max.
Linie
Max.
Linie
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Index |
357
Links
Kontakte 322–326
ContactsController 322
Formular zum Eingeben von Kontaktinformationen 322
Formular zum Erstellen neuer
Kontakte 325
Nachrichten 330
Pläne 332
PlansController 332
Posts 317–319
PostsController 317
Projekte 335
ProjectsController 335
Routen, Controller und Views 308–310
Authentifizierungs-Service 309
environment (Datei) 308
LabelingFormBuilder 310
Routing 308
Schema und Modelle 302–308
Attachment 308
Comment 307
Contact 306
Document 307
Message 307
Plan 307
Post 305
Project 307
User (Modell) 305
Sessions 337
Anmelde-Formular 338
SessionsController 337
Intranet Workgroup Collaboration
(Anwendung) 302–354
Introspektion 12, 120
IRC-Channel für Rails 15
J
Max.
Linie
Japan, Ruby in 11
JavaScript auf Ajax-Anfragen zurückgeben 72
JavaScript Object Notation (JSON) 159
JavaScript Unit Testing 140, 256
script.aculo.us 140
JavaScript, durch Methoden generiert 2
JavaScript, eigenes erstellen 85
JavaScript, mit Ruby erstellen 73
javascript_include_tag 36
JavaScript-Bibliotheken 27
JavaScriptGenerator (RJS) (Methoden) 83
JSON (JavaScript Object Notation) 159
358 | Index
K
Klassen-Proxies (RJS) 86
Konqeror 55
Konsequenzen verbesserter Reaktionszeiten 104
konsistente Seitenelemente 102
konsistente Seitenelemente und Usability 102
Konvention vor Konfiguration 12
kryptographische Hashes 155
L
langlaufende Aufgaben 177
Layouts 30
leere Seite 104
link_to 32, 38
link_to_function 44, 55
link_to_remote 39, 44
Optionen 42
link_to_remote (Helper) 73
Lipogramme und Rails 11
LiveScript 8
Logger und Debuggen 117
M
Mac, Verwendung 94
Markup-Validierung 135
Massenzuweisung 149
Matsumoto, Yukihiro 11
Meinung, Software mit einer 12
memcached und Performance 168
Mentor-Metapher 95
Microsoft 1
Microsoft Windows 94
Mind Hacks und Usability 97
Model View Controller (MVC) 10
Mongrel 17
Mosaic 7
Mozilla 8
MVC (Model View Controller) 10, 29
MySQL-Installer für Windows,
Mac und Linux 16
N
Nachrichten und Debuggen 115
Navigation, Fallen 101
Netscape 8, 109
Nugget, Hilfe durch 107
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Max.
Linie
Rechts
O
Object-Relational Mapper (ORM) 18
observe_field 51
observe_form 53
onChange 69
onclick (Attribut) 40
only 67
onUpdate 69
Opera 8, 55
ORM (Object-Relational Mapper) 18
Output Caching 169
Output-Caches ungültig werden lassen 174
overlap 67
P
Max.
Linie
Page Caching 169, 170
Partials 31
Schleifen und 31
Passwörter zurücksetzen 155
Performance 166–180
ActiveRecordStore 168
Assert Packager Plugin 176
Asset Packaging 175
BackgrounDRb Plugin 177
Cache Sweepers 175
langlaufende Aufgaben, Umgang mit 177
memcached 168
Output Caches leeren 174
Output Caching 169
Rails 167
Sessions abschalten 169
Session-Verwaltung 167
SQLSessionStore 168
Persönlicher Assistent (Metapher) 92
Plattform, Definiton 107
plattformübergreifende Entwicklung 107, 110
Plattform-Unterschiede, Umgang mit 108
postmoderne Ära der Webentwicklung 7
print (Anweisung) 117
Prinzipien der Usability 92
Produktivitäts-Beispiel 4
Progressive Enhancement 111
Prototype 13, 27, 35–53
$( ) (Funktion) 28
Ajax.Updater (Methode) 39
eine HTTP-Methode für einen Verweis
angeben 38
einfaches View-Template-Beispiel 37
element (Objekt) 76
HTML-Layout und CSS-Datei (Beispiel) 35
mit Rails 29
unittest.js Testsuite 144
versus script.aculo.us 54
Prototype JavaScript-Bibliothek 181–221
Ajax-Unterstützung 182–189
Ajax-Anfragen 183
Ajax-Updater 186
globale Responder 189
grundlegende Objekte 182
Basiserweiterungen 205–221
Array 205
Bereiche 207
die genutzte Version der Bibliothek
angeben (Prototype) 220
eine Funktion wiederholt aufrufen (PeriodicalExecuter) 219
Enumerable (über Collections iterieren)
208
Ereignisse 215
Funktionen 217
Hashes 206
hexadezimale Darstellung einer Zahl 215
Klassen 219
Objekt-Erweiterungen 218
String-Ersetzungen 212
verschiedene Funktionen ausprobieren,
bis eine funktioniert
(Try.these) 220
DOM-Änderungen 190–205
CSS-Klassennamen eines Elements 200
Dollar-Funktion 190
dynamisch Inhalte einfügen 201
Element-Methoden 193–200
Element-Positionierung 202
Formular-Observer 203
Kontrolle von Eingabefeldern 190
Selektoren 191
Website 181
Q
Queues 58
R
Rails
API-Dokumentation 15
Ausnahmen 115
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Max.
Linie
Index |
359
Links
Max.
Linie
Framework 10
Full-Stack 10
Generator 22
Helper und 32
Instruktionen versus Daten 71
intention und 13
Introspektion und 12
IRC-Channel 15
Lipogramme und 11
Mailing-Liste 16
Mantras 11
MVC (Model View Controller) 10
Performance und 167
Projekt beginnen 22
Prototype und 29
Rahmen 222
Ressourcen 15
Sicherheits-Mailing-Liste 165
Texteditor 16
Überblick 10–19
Usability und 109
Wiki 16
Rake 72
Reiseleiter (Metapher) 93
Remote Scripting 7
remote_form_for 49
replace (Methode) 77
replace_html (Methode) 77
Review Quiz (Anwendung) 261–279
JavaScript und CSS 273
Stylesheet 275
Routen, Controller und Views 264
Drag-und-Drop-Sortierung 266
Editieren 268
Ergebnisse 269
Layout-View 264
Quiz-Controller 266
Schema und Modelle 262
Question (Modell) 263
Quiz (Modell) 263
Session-basierte Authentifizierung 261
RJS 71–90
.rjs-Dateien 74
all (Methode) 82
Anweisungen 72
any (Methode) 82
Ausführung verzögern 84
collect (map) (Methode) 80
360 | Index
Collection-Proxies 79
Debugging-Modus 125
detect (find) (Methode) 81
DOM-Elemente anpassen 84
Drag-und-Drop-Elemente erstellen 85
each (Methode) 80
eigenes JavaScript generieren 85
Element-Proxies 75–79
Helper 86
Inhalte einfügen 84
inject (Methode) 83
invoke (Methode) 80
JavaScript mit Ruby generieren 73
JavaScript rendern ohne RJS 73
JavaScriptGenerator-Methoden 83
Klassen-Proxies 86
Lösung versus klassischer Weg 89
max (Methode) 82
ohne Ajax 87
partition (Methode) 82
pluck (Methode) 80
reales Beispiel 88
reject (Methode) 81
reload (Methode) 79
select (Methode) 79, 81
sort_by (Methode) 83
Testen und Debuggen 74
Überblick 72
umleiten 84
zip (Methode) 83
Routing Navigator 127
Ruby
Beginnen 14
Dokumentation zur Basis und zur StandardBibliothek 15
Domain Specific Languages (DSLs) 72
Geschichte von 11
Installieren 14
IRC-Channel 15
Mailing-Liste 15
Rake 72
Ressourcen 14
RubyGems Paketverwaltung 15
Tutoriums-Website 14
Website 14
Ruby on Rails (siehe Rails)
Ruby-generiertes JavaScript (siehe RJS)
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Max.
Linie
Rechts
S
Max.
Linie
Safari 8, 55
Same-Origin-Richtlinie 158
Schleifen und Partials 31
script.aculo.us 13, 54–70, 222–259
Assertions 258
Autovervollständigen 244
Basiseffekte 223
Effect.Highlight 224
Effect.Move 223
Effect.Opacity 223
Effect.Parallel 225
Effect.ScrollTo 225
Callbacks 58
DOM-Builder 255
Draggables 61, 233
Drag-und-Drop 60
Drag-und-Drop-Funktionalität 233
Droppables 64, 238
Effect (Objekt) 55
Effect.toggle 57
Effekt-Callbacks 231
Effekt-Instanzmethoden und
-eigenschaften 228
Effekt-Optionen 227
Effekt-Queues 231
Effekt-Transitionen 229
Element-Erweiterungen 253
Funktionalität für Controls 244–253
gute Benutzerefahrung 55
Hilfsmethoden 259
In-Place-Editoren 247
JavaScript Unit Testing 140, 256
Kombinationseffekte 56, 225
Effect.Appear 225
Effect.BlindDown 226
Effect.BlindUp 226
Effect.DropOut 226
Effect.Fade 225
Effect.Fold 227
Effect.Grow 227
Effect.Puff 226
Effect.Pulsate 227
Effect.Shake 226
Effect.Shrink 227
Effect.SlideDown 226
Effect.SlideUp 226
Effect.Squish 227
Effect.SwitchOff 226
Slider 250
Sortables 66, 239–244
Ajaxifiziert 69
horizontal sortierbar 241
scrollbar 241
sortierbarer Baum 242
statische Effekt-Methoden 233
Test.Unit.Runner 142
Test-Wiki 144
Transitionen 59
Umschalt-Effekte 57
unittest.js Test Suites 144
verkettete Effekte (Queues) 58
versus Prototype 54
visual_effect (Helper) 59
visuelle Effekte 54, 223
Website 222
script/server (Befehl) 17
Scrollen 68
Secure Sockets Layer (SSL) 163
Seite, Konzept der 100
Seitenelemente 100
Sessions abschalten 169
Sessions abschalten und Performance 169
Session-Verwaltung 167
sichere Operationen versus Idempotenz 98
Sicherheit 145–165
Ajax-Proxy erstellen 158
Beschränkung auf eine Domäne 158
Card Validation Value (CVV) und Audits 157
Cross-Site Cooking 153
Cross-Site Scripting (XSS) 154
Datensatz-IDs 146
in URLs 148
eingeschränkte Queries 146
Formular-Validierung 151
Hash 155
HTTP-Methoden, Missbrauch 160
JSON 159
Logs stummschalten 157
Massenzuweisung 149
Passwörter zurücksetzen 155
Rails Sicherheits-Mailing-Liste 165
Same-Origin-Richtlinie (Beschränkung
auf eine Domäne) 158
Secure Sockets Layer (SSL) 163
Session Fixation 153
SQL-Injection 151
Trust, but Verify 146
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Index |
361
Max.
Linie
Links
Benutzer-Modell 93
direkte Anpassung 96
Erkennen der Fähigkeiten 109
Grips 95
Hilfs-Nuggets 107
Idempotenz 98
konsistente Seitenelemente 102
leere Seiten 104
Mentor (Metapher) 95
Mind Hacks und 97
persönlicher Assistent (Metapher) 92
Plattformen, Unterschiede 108
plattformübergreifende Entwicklung 107
Prinzipien 92–97
Programm-Modell 93
Rails und 109
Reaktion, verbesserte 103
Reiseleiter (Metapher) 93
Taggen 107
Tastenkürzel und 102
Trainingsinhalt 105
Web
HTTP 98
Seite 99
Windows- versus Mac-Programm-Modell 94
Verschlüsselung und Sicherheitszertifikate 163
Vertraue keiner Benutzereingabe 145
Sicherheit-Logs stummschalten 157
Sicherheitszertifikate und Verschlüsselung 164
sortable_element (Helper) 66, 69
sortable_element_js (Helper) 66
Sortables 66, 239–244
Spitzhacken-Buch 14
SQL-Injection 151
SQLSessionStore 168
SSL (Secure Sockets Layer) 163
Stack Trace 115
Stack Trace und Debuggen 116
T
TaDa List 13
Tag 67
Taggen 107
tail (Tool) und Debuggen 117
Tastaturbefehle und Usability 102
Testen 130–144
ARTS (Another RJS Testing System)
Plugin 133
assert_valid_markup Rails-Plugin 135
Errors versus Failures 132
funktionale Tests 131
HTML-Validität 134
Integrationstests 136
JavaScript Unit Testing 140
Markup-Validierung 135
open_session 138
script.aculo.us-Wiki 144
Test::Unit 131
test_orders 138
test_signin 138
Testen und Debuggen 114–144
RJS 74
Test-Stubs 114
Thomas, Dave 14
trainer metaphor 96
Trainingsinhalt 105, 107
Trust, but Verify 146
U
Max.
Linie
unittest.js Test Suites 144
Usability 91–113
Ajax, wann verwenden 101
Aufforderungen 95
362 | Index
V
Validierungen 19
verbesserte Reaktion mit Ajax 103
Verschlüsselung und Sicherheits-Zertifikate 163
Vertraue keiner Benutzereingabe 145
Verweise 39
Visual Basic-Skripte 9
visual_effect (Helper) 59
vollständiger Trace 117
W
W3C-Validator, Interaktion mit 135
Web
Ajax-Modell 4
klassisches Modell 2
Zeitalter der Entwicklung 6
Web Remoting 7
Web Startups 1
WEBrick 17
WorldWideWeb-Programm 6
Wright, Ernest V. 11
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Max.
Linie
Rechts
X
XML und Ajax 9
XMLHTTP (ActiveX-Objekt) 8
XMLHttpRequest 8, 21, 109, 289
XMLHttpRequest für domänenübergreifende
Anfragen, umleiten 159
XSS (Cross-Site Scripting) 154
Y
Yahoo 1
YAML (Yet Another Markup Language) 125
yield 36
Z
Zeitalter der Web-Entwicklung 6
zeitbasierte versus framebasierte Effekte 58
zu einer eigenen Funktion verweisen 44
Zurück-Button 101
Max.
Linie
Max.
Linie
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Index |
363
Herunterladen