Wiki source code of ERPrototaculous
Version 261.1 by Ravi Mendis on 2009/07/16 09:52
Show last authors
author | version | line-number | content |
---|---|---|---|
1 | == Introduction == | ||
2 | |||
3 | ERPrototaculous was developed to provide the ajax functionality in ERDivaLook. | ||
4 | |||
5 | === What is ERPrototaculous? === | ||
6 | |||
7 | Features include: | ||
8 | |||
9 | * 'Organic' support for Prototype and Scriptaculous in WebObjects. | ||
10 | * Use of [[Unobtrusive Javascript>>http://en.wikipedia.org/wiki/Unobtrusive_JavaScript]]. | ||
11 | * Pseudo-stateless ajax responses | ||
12 | * No custom Prototype extensions | ||
13 | * A set of widgets in the Prototype + Scriptaculous family. | ||
14 | |||
15 | ==== Unobtrusive Javascript in ERPrototaculous ==== | ||
16 | |||
17 | Unobtrusive javascript is used in contrast to on-demand style of ajax programming. | ||
18 | By including Javascript as well as CSS globally in the page wrapper, CSS and/or Javascript doesn't have to load inside ajax requests. | ||
19 | |||
20 | The result is **faster** and more **reliable** ajax in WebObjects applications. | ||
21 | |||
22 | ==== Prototype WebObjects Elements ==== | ||
23 | |||
24 | ##Ajax.Updater## and ##Ajax.Request## have been implemented as WebObjects dynamic elements. | ||
25 | |||
26 | ===== Ajax.Updater ===== | ||
27 | |||
28 | Support for Prototype's [[Ajax.Updater>>http://www.prototypejs.org/api/ajax/updater]] is in the form of three components: | ||
29 | |||
30 | * AjaxUpdaterLink | ||
31 | * AjaxUpdaterButton | ||
32 | * AjaxUpdaterForm (with ##onsubmit## for ajax form submission) | ||
33 | |||
34 | These components will update a **container** on the page. | ||
35 | |||
36 | ===== Ajax.Request ===== | ||
37 | |||
38 | Prototype's [[Ajax.Request>>http://www.prototypejs.org/api/ajax/request]] is in the form of: | ||
39 | |||
40 | * AjaxRequestLink | ||
41 | * AjaxRequestButton | ||
42 | |||
43 | These are used for strictly **background** ajax communication. | ||
44 | |||
45 | ==== Prototype + Scriptaculous Widgets ==== | ||
46 | |||
47 | * Accordion | ||
48 | * LightWindow | ||
49 | * ModalBox | ||
50 | * CalendarDateSelect | ||
51 | * FileUpload | ||
52 | |||
53 | == Forms in ERPrototaculous == | ||
54 | |||
55 | Differences from using forms in WebObjects. i.e ##WOForm##: | ||
56 | |||
57 | 1. All form controls must be named. This includes text fields, selects and buttons. | ||
58 | (WebObjects dynamically assigned names are not compatible with ERPrototaculous). | ||
59 | 1. All forms in an ERPrototaculous app are instances of ##AjaxUpdaterForm##. | ||
60 | 1. Form submits can be the form of a: | ||
61 | |||
62 | * | ||
63 | ** Static ##<button>## | ||
64 | ** WOSubmitButton (if the result is to update whole page/app. | ||
65 | ** AjaxUpdaterButton (to update a **container**). Or | ||
66 | ** AjaxRequestButton (for a background ajax request) | ||
67 | |||
68 | == Ajax Page Caching in ERPrototaculous == | ||
69 | |||
70 | One notable difference in the ERPrototaculous and Ajax.framework is in the ajax responses. | ||
71 | ERPrototaculous updates and actions break with "The WebObjects Way" by being pseudo-stateless. | ||
72 | |||
73 | Instead of returning a new context, an ajax update or action is in fact the same instance. | ||
74 | |||
75 | The reason returning a new context is not necessary is because a client never travels back or forwards through an ajax application unlike in a typical WebObjects app. | ||
76 | Here the current state (or context) of the update or action is all that is necessary. |