Introduction |
|
iv | |
|
Part I: Introduction to Flex 3 |
|
|
1 | (100) |
|
|
3 | (14) |
|
|
3 | (1) |
|
|
4 | (3) |
|
Clarifying the Competition |
|
|
6 | (1) |
|
|
7 | (8) |
|
Bursting Myths about Flash and Flex |
|
|
7 | (5) |
|
|
12 | (3) |
|
|
15 | (2) |
|
|
17 | (24) |
|
A (Not So) Brief History of Flex |
|
|
17 | (2) |
|
The Adobe Flex 3 Ecosystem |
|
|
19 | (16) |
|
|
19 | (8) |
|
|
27 | (3) |
|
|
30 | (2) |
|
|
32 | (2) |
|
|
34 | (1) |
|
The Adobe Flex RIA Process Flow |
|
|
35 | (3) |
|
|
36 | (1) |
|
|
37 | (1) |
|
|
37 | (1) |
|
|
38 | (1) |
|
Future Additions to the Flex Ecosystem |
|
|
38 | (1) |
|
|
39 | (2) |
|
ActionScript 3.0 Fundamentals |
|
|
41 | (26) |
|
|
41 | (3) |
|
|
42 | (1) |
|
|
43 | (1) |
|
|
44 | (1) |
|
|
44 | (3) |
|
|
44 | (2) |
|
|
46 | (1) |
|
Using Classes and Data types |
|
|
47 | (10) |
|
|
47 | (1) |
|
|
48 | (1) |
|
|
49 | (1) |
|
|
50 | (2) |
|
|
52 | (1) |
|
|
53 | (1) |
|
|
54 | (1) |
|
|
55 | (2) |
|
Object-Oriented Programming |
|
|
57 | (8) |
|
|
58 | (1) |
|
|
58 | (1) |
|
|
59 | (1) |
|
|
59 | (5) |
|
Interfaces and Inheritance |
|
|
64 | (1) |
|
|
65 | (2) |
|
|
67 | (18) |
|
The Flash Platform Framework |
|
|
67 | (1) |
|
|
68 | (1) |
|
Understanding the Display Architecture |
|
|
68 | (1) |
|
|
69 | (4) |
|
|
69 | (1) |
|
|
70 | (1) |
|
|
71 | (1) |
|
The EventDispatcher Class |
|
|
72 | (1) |
|
|
73 | (10) |
|
|
74 | (4) |
|
|
78 | (1) |
|
|
79 | (4) |
|
|
83 | (2) |
|
Introduction to Flex Builder 3 |
|
|
85 | (16) |
|
Getting Started with Flex Builder |
|
|
85 | (5) |
|
|
86 | (1) |
|
Learning Flex and Getting Help |
|
|
87 | (3) |
|
|
90 | (8) |
|
|
91 | (2) |
|
|
93 | (1) |
|
|
93 | (1) |
|
|
94 | (4) |
|
What's New in Flex Builder 3 |
|
|
98 | (2) |
|
|
98 | (1) |
|
|
98 | (1) |
|
|
99 | (1) |
|
|
99 | (1) |
|
|
100 | (1) |
|
Part II: Developing with Flex 3 |
|
|
101 | (114) |
|
|
103 | (24) |
|
The Flex Compilation Process |
|
|
103 | (3) |
|
|
104 | (1) |
|
|
105 | (1) |
|
|
106 | (1) |
|
|
106 | (2) |
|
|
107 | (1) |
|
Creating a Flex Application |
|
|
108 | (12) |
|
|
108 | (3) |
|
|
111 | (6) |
|
|
117 | (1) |
|
Using Triggers and Effects |
|
|
118 | (1) |
|
Compiling Your Application |
|
|
119 | (1) |
|
Creating an ActionScript Application |
|
|
120 | (3) |
|
Creating an ActionScript Project |
|
|
120 | (3) |
|
|
123 | (1) |
|
The (Undocumented) [ SWF] Metadata Tag |
|
|
123 | (2) |
|
[ SWF] Metadata Properties |
|
|
124 | (1) |
|
|
125 | (2) |
|
|
127 | (22) |
|
|
127 | (6) |
|
|
127 | (1) |
|
|
128 | (1) |
|
|
128 | (1) |
|
|
129 | (1) |
|
|
129 | (4) |
|
|
133 | (15) |
|
|
133 | (2) |
|
|
135 | (4) |
|
|
139 | (2) |
|
Using MXML and ActionScript |
|
|
141 | (7) |
|
|
148 | (1) |
|
Developing with Flex Builder 3 |
|
|
149 | (30) |
|
|
149 | (15) |
|
|
149 | (5) |
|
|
154 | (1) |
|
|
154 | (3) |
|
|
157 | (7) |
|
|
164 | (6) |
|
|
164 | (1) |
|
Creating an Export Release |
|
|
165 | (2) |
|
|
167 | (3) |
|
|
170 | (8) |
|
|
170 | (3) |
|
|
173 | (1) |
|
|
173 | (3) |
|
|
176 | (2) |
|
|
178 | (1) |
|
Customizing Flex Builder 3 |
|
|
179 | (36) |
|
Optimizing Flex Builder Performance |
|
|
179 | (7) |
|
Project Development Best Practices |
|
|
179 | (2) |
|
Eclipse Performance Management |
|
|
181 | (5) |
|
Customizing the Workbench |
|
|
186 | (4) |
|
Editing the Workspaces List |
|
|
186 | (2) |
|
|
188 | (1) |
|
|
189 | (1) |
|
Managing Workspace Preferences |
|
|
190 | (1) |
|
Using Code Repositories in Flex Builder |
|
|
190 | (24) |
|
|
191 | (1) |
|
Subclipse for Subversion Source Management |
|
|
192 | (22) |
|
|
214 | (1) |
|
Part III: Working with Components |
|
|
215 | (102) |
|
The Component Life Cycle and Class Hierarchy |
|
|
217 | (14) |
|
The Role of Flash in Flex Applications |
|
|
217 | (1) |
|
The Flex Framework Life Cycle |
|
|
218 | (4) |
|
|
218 | (2) |
|
|
220 | (2) |
|
|
222 | (7) |
|
Flash and Flex Class Packages |
|
|
222 | (1) |
|
|
222 | (2) |
|
|
224 | (1) |
|
|
225 | (1) |
|
Formatters, Validators, and Collection Classes |
|
|
226 | (2) |
|
Framework Functions and Events |
|
|
228 | (1) |
|
|
229 | (2) |
|
Using Data Binding and Events |
|
|
231 | (14) |
|
|
231 | (4) |
|
|
235 | (1) |
|
|
236 | (2) |
|
|
236 | (1) |
|
|
237 | (1) |
|
|
238 | (1) |
|
|
238 | (1) |
|
|
239 | (2) |
|
|
240 | (1) |
|
|
240 | (1) |
|
|
241 | (1) |
|
|
241 | (3) |
|
|
241 | (1) |
|
|
242 | (1) |
|
Strategies for Using Custom Events |
|
|
243 | (1) |
|
|
244 | (1) |
|
User Interface Controls and Containers |
|
|
245 | (26) |
|
|
245 | (3) |
|
mx.controls.Label and mx.controls.Text |
|
|
245 | (1) |
|
|
246 | (1) |
|
|
247 | (1) |
|
mx.controls.HRule and mx.controls.VRule |
|
|
247 | (1) |
|
|
248 | (1) |
|
|
248 | (8) |
|
mx.controls.Button and mx.controls.LinkButton |
|
|
249 | (1) |
|
mx.controls.TextInput and mx.controls.TextArea |
|
|
249 | (1) |
|
mx.controls.NumericStepper |
|
|
250 | (1) |
|
mx.controls.DateChooser and mx.controls.DateField |
|
|
250 | (1) |
|
|
251 | (1) |
|
|
252 | (1) |
|
mx.controls.RadioButton and mx.controls.RadioButtonGroup |
|
|
252 | (1) |
|
mx.controls.HSlider and mx.controls.VSlider |
|
|
253 | (1) |
|
mx.controls.RichTextEditor |
|
|
254 | (1) |
|
|
254 | (1) |
|
mx.controls.PopUpMenuButton |
|
|
255 | (1) |
|
|
256 | (1) |
|
|
256 | (1) |
|
|
256 | (8) |
|
mx.container.VBox and mx.container.HBox |
|
|
257 | (1) |
|
mx.containers.HDividedBox and mx.containers.VDividedBox |
|
|
258 | (1) |
|
mx.core.Application, mx.containers.Panel, mx.containers.TitleWindow |
|
|
259 | (1) |
|
|
260 | (1) |
|
|
261 | (1) |
|
|
262 | (1) |
|
|
263 | (1) |
|
mx.containers.ApplicationControlBar |
|
|
264 | (1) |
|
|
264 | (5) |
|
|
264 | (1) |
|
|
265 | (1) |
|
mx.containers.TabNavigator |
|
|
265 | (1) |
|
|
266 | (1) |
|
|
267 | (1) |
|
|
267 | (1) |
|
mx.containers.MenuBar and mx.controls.Menu |
|
|
268 | (1) |
|
mx.controls.ButtonBar and mx.controls.ToggleButtonBar |
|
|
269 | (1) |
|
|
270 | (1) |
|
|
270 | (1) |
|
|
271 | (10) |
|
|
271 | (1) |
|
|
272 | (1) |
|
Positioning by Percentage |
|
|
273 | (1) |
|
|
274 | (1) |
|
|
275 | (4) |
|
|
276 | (1) |
|
|
277 | (1) |
|
Constraints in ActionScript |
|
|
278 | (1) |
|
|
278 | (1) |
|
|
279 | (1) |
|
Performance Considerations |
|
|
280 | (1) |
|
|
280 | (1) |
|
User Interface Integration |
|
|
281 | (18) |
|
|
281 | (5) |
|
|
284 | (1) |
|
Building Forms with Flex Builder Design View |
|
|
285 | (1) |
|
Setting the defaultButton on the Form |
|
|
286 | (1) |
|
|
286 | (2) |
|
|
286 | (2) |
|
|
288 | (7) |
|
|
289 | (2) |
|
|
291 | (2) |
|
|
293 | (2) |
|
|
295 | (2) |
|
|
295 | (1) |
|
|
295 | (1) |
|
|
296 | (1) |
|
|
296 | (1) |
|
|
297 | (2) |
|
|
299 | (18) |
|
|
299 | (3) |
|
|
300 | (1) |
|
Applications That Can Be Built with AIR |
|
|
300 | (1) |
|
|
301 | (1) |
|
Building an AIR Application |
|
|
302 | (4) |
|
|
303 | (1) |
|
The IntroToAIR-app.xml Descriptor File |
|
|
304 | (2) |
|
The AIR Configuration File |
|
|
306 | (5) |
|
Building and AIR Application Part II |
|
|
311 | (5) |
|
Modifying the IntroToAIR.mxml Window |
|
|
311 | (2) |
|
|
313 | (1) |
|
The IntroToAIR-app.xml Descriptor File |
|
|
314 | (2) |
|
|
316 | (1) |
|
Part IV: Advanced Component Development |
|
|
317 | (92) |
|
Custom ActionScript Components |
|
|
319 | (24) |
|
|
320 | (3) |
|
UlComponent and IUIComponent |
|
|
320 | (1) |
|
|
321 | (2) |
|
|
323 | (10) |
|
Component Properties and the Flex Framework Life Cycle |
|
|
323 | (1) |
|
|
324 | (1) |
|
|
325 | (1) |
|
Using invalidateProperties() and Applying Properties to the Component |
|
|
326 | (1) |
|
|
327 | (1) |
|
|
328 | (2) |
|
Selecting the Base Class for Your Component |
|
|
330 | (2) |
|
|
332 | (1) |
|
|
333 | (8) |
|
|
341 | (2) |
|
|
343 | (10) |
|
MXML Versus ActionScript Components |
|
|
343 | (2) |
|
|
345 | (3) |
|
Overriding updateDisplayList() |
|
|
345 | (1) |
|
Overriding layoutChrome() |
|
|
346 | (2) |
|
|
348 | (1) |
|
Creating Template Components |
|
|
348 | (3) |
|
|
350 | (1) |
|
|
350 | (1) |
|
Extending MXML Components |
|
|
351 | (1) |
|
|
352 | (1) |
|
Extending Flex Components |
|
|
353 | (16) |
|
A Look at Composite Components |
|
|
353 | (1) |
|
Creating Composite Components |
|
|
354 | (4) |
|
|
355 | (1) |
|
|
356 | (1) |
|
|
357 | (1) |
|
Extending Existing Components |
|
|
358 | (3) |
|
|
358 | (1) |
|
|
359 | (1) |
|
Extending UlComponents versus Standard Components |
|
|
360 | (1) |
|
Appearance versus Behavior |
|
|
361 | (1) |
|
|
361 | (6) |
|
Applying the Flex Component Life Cycle |
|
|
362 | (1) |
|
|
363 | (2) |
|
Customizing Composite Components |
|
|
365 | (2) |
|
|
367 | (2) |
|
Advanced Event Programming |
|
|
369 | (14) |
|
Custom Events versus Standard Events |
|
|
369 | (3) |
|
Extending Standard Events |
|
|
371 | (1) |
|
|
371 | (1) |
|
Adding Metadata to AS Class and MXML Files |
|
|
372 | (1) |
|
Adding Custom Events to Custom Components |
|
|
372 | (1) |
|
Handling Event Runtime Errors |
|
|
373 | (1) |
|
|
373 | (4) |
|
|
373 | (1) |
|
Preventing or Changing Default Behaviors |
|
|
374 | (1) |
|
|
374 | (3) |
|
|
377 | (3) |
|
Using the Bindable Metadata Tag |
|
|
377 | (1) |
|
Custom Data Binding with the Bindable Metadata Tag |
|
|
377 | (3) |
|
|
380 | (1) |
|
Custom Data Binding in ActionScript |
|
|
380 | (1) |
|
|
380 | (1) |
|
|
381 | (2) |
|
|
383 | (14) |
|
|
383 | (1) |
|
|
384 | (1) |
|
|
384 | (4) |
|
Creating States Using Flex Builder's Design View |
|
|
384 | (3) |
|
|
387 | (1) |
|
|
387 | (1) |
|
Understanding the MXML Tags |
|
|
388 | (3) |
|
|
388 | (1) |
|
|
389 | (1) |
|
|
389 | (1) |
|
Setting and Changing Properties and Styles |
|
|
390 | (1) |
|
|
390 | (1) |
|
|
391 | (1) |
|
Creating States in ActionScript |
|
|
391 | (2) |
|
|
393 | (1) |
|
|
393 | (2) |
|
|
394 | (1) |
|
|
394 | (1) |
|
|
395 | (1) |
|
|
396 | (1) |
|
|
397 | (12) |
|
|
397 | (2) |
|
|
398 | (1) |
|
|
398 | (1) |
|
|
399 | (1) |
|
|
399 | (1) |
|
Creating a Library with Flex Builder |
|
|
399 | (3) |
|
Creating a Library Project |
|
|
399 | (1) |
|
|
400 | (1) |
|
|
400 | (2) |
|
Creating Libraries with COMPC |
|
|
402 | (2) |
|
|
403 | (1) |
|
|
403 | (1) |
|
Specifying the Manifest File |
|
|
403 | (1) |
|
Best Practices for Component Libraries |
|
|
404 | (1) |
|
Sharing Source Directories |
|
|
404 | (1) |
|
|
405 | (1) |
|
|
405 | (3) |
|
|
405 | (1) |
|
|
406 | (1) |
|
Using Assets from Libraries |
|
|
407 | (1) |
|
|
407 | (1) |
|
|
408 | (1) |
|
Part V: Visual Effects and Multimedia |
|
|
409 | (160) |
|
|
411 | (12) |
|
|
411 | (11) |
|
Inline Styling Versus CSS |
|
|
411 | (2) |
|
|
413 | (2) |
|
CSS Constraint-Based Layout |
|
|
415 | (3) |
|
CSS Styles and Class Inheritance |
|
|
418 | (1) |
|
CSS Styles and Subcomponents |
|
|
419 | (3) |
|
|
422 | (1) |
|
|
423 | (14) |
|
|
423 | (10) |
|
|
423 | (1) |
|
|
424 | (1) |
|
|
424 | (2) |
|
Defining Skins per Object |
|
|
426 | (1) |
|
Defining Skins in Style Sheets |
|
|
426 | (2) |
|
Scaling and Scale-9 Grids |
|
|
428 | (2) |
|
Changing Styles at Runtime |
|
|
430 | (3) |
|
|
433 | (2) |
|
|
433 | (1) |
|
|
433 | (2) |
|
|
435 | (1) |
|
Separating Themes to Libraries |
|
|
435 | (1) |
|
|
435 | (2) |
|
|
437 | (24) |
|
|
437 | (22) |
|
|
440 | (6) |
|
|
446 | (2) |
|
|
448 | (1) |
|
|
449 | (1) |
|
|
450 | (4) |
|
|
454 | (3) |
|
|
457 | (1) |
|
|
458 | (1) |
|
|
458 | (1) |
|
|
459 | (2) |
|
Dynamic Skinning and the Drawing API |
|
|
461 | (20) |
|
Understanding the Drawing API |
|
|
461 | (10) |
|
Basic Programmatic Drawing |
|
|
462 | (9) |
|
|
471 | (4) |
|
Creating and Applying Programmatic Skins |
|
|
472 | (3) |
|
Additional Drawing API Capabilities |
|
|
475 | (4) |
|
|
476 | (1) |
|
|
477 | (1) |
|
|
478 | (1) |
|
|
478 | (1) |
|
|
479 | (2) |
|
|
481 | (22) |
|
Flash Platform Development Workflows |
|
|
482 | (1) |
|
|
483 | (2) |
|
Creating Flex Component Skins in Flash |
|
|
485 | (5) |
|
Using the Flex Skin Design Extension |
|
|
486 | (4) |
|
Skinning a Custom Flex Component |
|
|
490 | (11) |
|
Planning Your Custom Flex Component |
|
|
490 | (2) |
|
Building the Flex Component |
|
|
492 | (2) |
|
|
494 | (4) |
|
Skinning the Flex Component |
|
|
498 | (3) |
|
|
501 | (2) |
|
|
503 | (10) |
|
|
503 | (3) |
|
|
506 | (1) |
|
|
507 | (4) |
|
|
511 | (1) |
|
|
511 | (2) |
|
|
513 | (32) |
|
Methods for Bringing in Media |
|
|
513 | (6) |
|
|
514 | (1) |
|
Integrating the Media Content |
|
|
515 | (4) |
|
Understanding Progressive Loading and Streaming |
|
|
519 | (9) |
|
|
519 | (1) |
|
The SoundLoaderContext Class |
|
|
520 | (1) |
|
Playing and Controlling Sound |
|
|
521 | (4) |
|
Accessing ID3 Information |
|
|
525 | (3) |
|
|
528 | (1) |
|
|
528 | (1) |
|
|
528 | (15) |
|
Video Classes and Components |
|
|
528 | (8) |
|
The VideoDisplay Component |
|
|
536 | (2) |
|
|
538 | (1) |
|
|
538 | (1) |
|
Undocumented Video Classes |
|
|
539 | (1) |
|
Flash Player MovieStar Update |
|
|
539 | (4) |
|
|
543 | (2) |
|
Advanced Flash Integration |
|
|
545 | (24) |
|
Bringing Flex Classes into Flash |
|
|
545 | (2) |
|
Importing Custom Flex Classes through RSLs |
|
|
546 | (1) |
|
Importing Native Flex Classes |
|
|
547 | (1) |
|
|
547 | (20) |
|
The Flex Component Kit for Flash CS3 |
|
|
547 | (4) |
|
Porting Flash Native Components into Flex |
|
|
551 | (5) |
|
Custom States and Transitions in Flex Components |
|
|
556 | (11) |
|
|
567 | (2) |
|
|
569 | (132) |
|
|
571 | (24) |
|
|
571 | (11) |
|
|
571 | (2) |
|
XML and ActionScript: Before E4X |
|
|
573 | (3) |
|
XML and ActionScript 3.0: Using E4X |
|
|
576 | (6) |
|
|
582 | (7) |
|
|
582 | (1) |
|
|
582 | (4) |
|
|
586 | (3) |
|
Associative Arrays/Dictionary |
|
|
589 | (3) |
|
|
589 | (1) |
|
|
590 | (2) |
|
|
592 | (2) |
|
|
592 | (1) |
|
|
593 | (1) |
|
|
593 | (1) |
|
|
594 | (1) |
|
|
594 | (1) |
|
Formatters and Validators |
|
|
595 | (18) |
|
|
595 | (1) |
|
|
596 | (5) |
|
Using Standard Formatters |
|
|
596 | (4) |
|
Handling Input Data Errors |
|
|
600 | (1) |
|
|
601 | (6) |
|
Using Standard Validators |
|
|
602 | (3) |
|
Changing the Default Error Messages |
|
|
605 | (1) |
|
|
606 | (1) |
|
Regular Expressions in ActionScript 3 |
|
|
607 | (1) |
|
Common Regular Expression Use Cases |
|
|
607 | (1) |
|
A Regular Expression Primer |
|
|
607 | (1) |
|
RegExpValidator: A Validator's Validator |
|
|
608 | (1) |
|
Customizing and Centralizing Formatters and Validators |
|
|
609 | (3) |
|
|
609 | (1) |
|
|
610 | (2) |
|
|
612 | (1) |
|
Using the List Components |
|
|
613 | (10) |
|
|
613 | (4) |
|
|
614 | (3) |
|
Working with the List Class |
|
|
617 | (2) |
|
Item-Editing Functionality in List |
|
|
618 | (1) |
|
|
619 | (1) |
|
|
619 | (2) |
|
|
619 | (1) |
|
Working with the Menu Class |
|
|
620 | (1) |
|
|
621 | (1) |
|
|
621 | (1) |
|
|
621 | (1) |
|
List, HorizontalList, and TileList---Optimized Memory Consumption |
|
|
622 | (1) |
|
|
622 | (1) |
|
|
623 | (24) |
|
|
623 | (1) |
|
|
624 | (4) |
|
|
624 | (1) |
|
Changing the Look of the Tree |
|
|
625 | (1) |
|
Working with the Tree Control |
|
|
626 | (2) |
|
|
628 | (4) |
|
|
628 | (1) |
|
|
629 | (2) |
|
|
631 | (1) |
|
|
632 | (5) |
|
|
632 | (4) |
|
|
636 | (1) |
|
|
637 | (3) |
|
Implementing the AdvancedDataGrid |
|
|
637 | (1) |
|
Grouping Data in the AdvancedDataGrid |
|
|
638 | (1) |
|
Hierarchical Data in the AdvancedDataGrid |
|
|
639 | (1) |
|
|
640 | (4) |
|
|
640 | (1) |
|
Working with the OLAPDataGrid |
|
|
640 | (4) |
|
|
644 | (3) |
|
|
647 | (10) |
|
|
647 | (1) |
|
Working with Drag and Drop-Enabled Components |
|
|
648 | (3) |
|
Enabling a List for Drag and Drop |
|
|
650 | (1) |
|
|
650 | (1) |
|
|
651 | (1) |
|
Working with Drag and Drop Events |
|
|
651 | (1) |
|
Adding Drag and Drop Support to Nonenabled Components |
|
|
652 | (3) |
|
Setting Up Your Component as a Drag Initiator |
|
|
653 | (1) |
|
Setting Up Your Component as a Drop Target |
|
|
654 | (1) |
|
Additional Drag and Drop Tips |
|
|
655 | (1) |
|
Custom DragSource Formats |
|
|
655 | (1) |
|
|
655 | (1) |
|
Maintaining Type Information |
|
|
656 | (1) |
|
|
656 | (1) |
|
|
657 | (14) |
|
Overview of AIR Drag and Drop |
|
|
657 | (5) |
|
|
658 | (2) |
|
|
660 | (2) |
|
Dragging Data from an AIR Application |
|
|
662 | (4) |
|
Dragging Files to an AIR Application |
|
|
666 | (3) |
|
|
669 | (2) |
|
Using the Charting Components |
|
|
671 | (18) |
|
|
671 | (13) |
|
Assigning Data to a Chart |
|
|
671 | (1) |
|
|
672 | (8) |
|
|
680 | (1) |
|
|
681 | (1) |
|
|
682 | (1) |
|
|
683 | (1) |
|
Runtime Chart Interaction |
|
|
684 | (1) |
|
Handling User Interaction |
|
|
684 | (1) |
|
|
684 | (1) |
|
Customizing a Chart's Look and Feel |
|
|
685 | (2) |
|
|
685 | (1) |
|
|
686 | (1) |
|
|
686 | (1) |
|
|
687 | (2) |
|
Resource Bundles and Data Localization |
|
|
689 | (12) |
|
|
689 | (1) |
|
L10n Using Properties Files |
|
|
690 | (4) |
|
Understanding Properties Files |
|
|
690 | (1) |
|
Dealing with Character Encoding |
|
|
691 | (1) |
|
Setting Up Locales in Your Flex Project |
|
|
692 | (2) |
|
Implementing i18n in Flex 3 |
|
|
694 | (4) |
|
|
694 | (4) |
|
Loading Resources at Runtime |
|
|
698 | (1) |
|
|
698 | (1) |
|
Programmatically Generating ResourceBundle |
|
|
699 | (1) |
|
Pairing Resources with Modules |
|
|
699 | (1) |
|
Globalizing AIR Applications |
|
|
699 | (1) |
|
|
700 | (1) |
|
Part VII: Client Communications |
|
|
701 | (132) |
|
Browser Communication in Flex |
|
|
703 | (18) |
|
Understanding the Web Context |
|
|
703 | (1) |
|
Using flashVars to Pass Data into Flex |
|
|
704 | (2) |
|
Linking to an External Page URL |
|
|
706 | (1) |
|
Interacting with JavaScript |
|
|
706 | (11) |
|
Invoking JavaScript from Flex |
|
|
707 | (1) |
|
Invoking ActionScript from JavaScript |
|
|
708 | (1) |
|
Passing Data Between ActionScript and JavaScript |
|
|
709 | (8) |
|
Using the Flex-Ajax Bridge |
|
|
717 | (1) |
|
Disabling Browser Integration |
|
|
718 | (1) |
|
|
719 | (2) |
|
|
721 | (10) |
|
Why Embed HTML in an AIR Application? |
|
|
721 | (1) |
|
|
722 | (1) |
|
|
722 | (4) |
|
|
723 | (1) |
|
Loading In-Memory Content |
|
|
724 | (1) |
|
Loading Local File Content |
|
|
724 | (2) |
|
Ineracting with JavaScript |
|
|
726 | (4) |
|
Calling Embedded JavaScript from ActionScript |
|
|
726 | (2) |
|
Calling ActionScript from JavaScript |
|
|
728 | (1) |
|
Controlling the HTML DOM from ActionScript |
|
|
729 | (1) |
|
|
730 | (1) |
|
|
731 | (20) |
|
|
731 | (1) |
|
|
732 | (1) |
|
Fragment Identifiers in URLs |
|
|
733 | (1) |
|
Flex 3 Support for Deep Linking |
|
|
733 | (6) |
|
Using the BrowserManager API |
|
|
734 | (4) |
|
Under the Hood: How Flex Deep Linking Works |
|
|
738 | (1) |
|
Real-World Deep Linking: the Space Image Browser |
|
|
739 | (8) |
|
Working with Navigational States |
|
|
740 | (3) |
|
A More Sophisticated Image Browser |
|
|
743 | (4) |
|
Search Engine Indexing and Optimization |
|
|
747 | (1) |
|
Related Technologies and Tools |
|
|
748 | (1) |
|
|
748 | (1) |
|
|
748 | (1) |
|
|
749 | (1) |
|
|
749 | (2) |
|
System Interactions in Flex |
|
|
751 | (16) |
|
Detecting Client System Capabilities |
|
|
751 | (6) |
|
|
757 | (3) |
|
Enabling Right-Click Context Menus |
|
|
760 | (5) |
|
Adding and Removing Context Menu Options |
|
|
760 | (3) |
|
Invoking Actions from Context Menus |
|
|
763 | (2) |
|
Limitations of System Interactions |
|
|
765 | (1) |
|
Limitations of Full-Screen Mode |
|
|
765 | (1) |
|
Limitations of Custom Context Menus |
|
|
766 | (1) |
|
|
766 | (1) |
|
Native Desktop Support with AIR |
|
|
767 | (22) |
|
|
767 | (7) |
|
|
768 | (5) |
|
The Native Window Explorer |
|
|
773 | (1) |
|
|
774 | (8) |
|
|
774 | (6) |
|
Windows- and Application-Level Menus |
|
|
780 | (2) |
|
Interacting with the System Tray/Dock |
|
|
782 | (2) |
|
|
784 | (1) |
|
|
784 | (1) |
|
Monitoring Network Connection |
|
|
785 | (1) |
|
AIR Capabilities and the Flash Runtime |
|
|
786 | (1) |
|
Enabling Full-Screen Mode |
|
|
787 | (1) |
|
|
787 | (2) |
|
LocalConnection and Shared Objects |
|
|
789 | (14) |
|
|
789 | (1) |
|
The LocalConnection Class |
|
|
789 | (5) |
|
|
790 | (2) |
|
Crossing Domain Boundaries |
|
|
792 | (1) |
|
|
793 | (1) |
|
Working around the 40KB Limit |
|
|
793 | (1) |
|
Standard LocalConnection Errors |
|
|
794 | (1) |
|
Working with Local Shared Objects |
|
|
794 | (7) |
|
Creating or Retrieving Local Shared Objects |
|
|
795 | (1) |
|
Storing Data in Local Shared Objects |
|
|
795 | (1) |
|
Retrieving Data from Local Shared Objects |
|
|
795 | (1) |
|
Explicitly Saving Local Shared Objects |
|
|
795 | (2) |
|
Deleting Properties and Destroying Local Shared Objects |
|
|
797 | (1) |
|
|
797 | (2) |
|
Serializing Custom Classes |
|
|
799 | (2) |
|
|
801 | (2) |
|
File Management with Flex |
|
|
803 | (10) |
|
|
803 | (1) |
|
|
803 | (1) |
|
Using the FileReference Class |
|
|
804 | (4) |
|
Handling FileReference Events |
|
|
804 | (1) |
|
|
805 | (3) |
|
Downloading Files with FileReference |
|
|
808 | (1) |
|
Canceling a File Upload or Download |
|
|
808 | (1) |
|
Working with Multiple Files |
|
|
808 | (2) |
|
Server-Side Considerations |
|
|
810 | (1) |
|
|
811 | (2) |
|
Local File Management with AIR |
|
|
813 | (20) |
|
|
813 | (3) |
|
|
813 | (1) |
|
|
814 | (1) |
|
|
814 | (2) |
|
Synchronous versus Asynchronous API |
|
|
816 | (3) |
|
Copying a File Synchronously |
|
|
817 | (1) |
|
Copying a File Asynchronously |
|
|
817 | (2) |
|
Other File and Directory Operations |
|
|
819 | (2) |
|
|
819 | (1) |
|
Deleting Files and Directories |
|
|
819 | (1) |
|
Moving Files and Directories |
|
|
819 | (1) |
|
|
820 | (1) |
|
Creating Temporary Directories and Files |
|
|
820 | (1) |
|
Working with Native File Dialogs |
|
|
821 | (5) |
|
|
821 | (1) |
|
Native Browse for Open Dialog |
|
|
822 | (2) |
|
Native Browse for Open Multiple Dialogs |
|
|
824 | (1) |
|
|
825 | (1) |
|
Reading and Writing File Data |
|
|
826 | (2) |
|
Saving Bitmap Data as a JPEG File |
|
|
827 | (1) |
|
Reading XML Data from a File |
|
|
828 | (1) |
|
|
828 | (3) |
|
|
831 | (1) |
|
|
831 | (1) |
|
|
831 | (1) |
|
|
832 | (1) |
|
|
832 | (1) |
|
Part VIII: Server Integration |
|
|
833 | (118) |
|
Introduction to RPC Services |
|
|
835 | (18) |
|
|
835 | (2) |
|
|
837 | (2) |
|
Differences between MXML and ActionScript Classes |
|
|
838 | (1) |
|
Parameter Binding versus Explicit Parameter Passing |
|
|
838 | (1) |
|
Working with the HTTPService Component |
|
|
839 | (2) |
|
Working with the WebService Component |
|
|
841 | (4) |
|
Using a WebService in MXML |
|
|
841 | (3) |
|
Calling a WebService in ActionScript |
|
|
844 | (1) |
|
Debugging Remote Service Calls |
|
|
845 | (5) |
|
|
846 | (1) |
|
|
846 | (4) |
|
Choosing a Protocol and Server Implementation |
|
|
850 | (1) |
|
Alternative Server Implementations for AMF |
|
|
850 | (1) |
|
|
851 | (2) |
|
|
853 | (12) |
|
Exception Handling with Synchronous Code |
|
|
853 | (7) |
|
Flash Debug Player versus Release Player |
|
|
853 | (2) |
|
|
855 | (1) |
|
|
856 | (2) |
|
|
858 | (2) |
|
Asynchronous Error Handling with Events |
|
|
860 | (3) |
|
|
861 | (1) |
|
Asynchronous Events in the Debug Player |
|
|
862 | (1) |
|
|
863 | (2) |
|
Flex and Flash Media Server |
|
|
865 | (16) |
|
Benefits of Streaming Video with the FMS |
|
|
865 | (2) |
|
|
866 | (1) |
|
Setting Up Applications and Understanding Instances |
|
|
867 | (1) |
|
Developing for the Flash Media Server in Flex |
|
|
868 | (4) |
|
Using the Bandwidth Check System of the Flash Media Server |
|
|
869 | (3) |
|
Understanding the Netstream with FMS |
|
|
872 | (1) |
|
|
873 | (1) |
|
|
874 | (3) |
|
Using the Flash Media Server for Live and Recorded Streams |
|
|
875 | (2) |
|
|
877 | (3) |
|
|
878 | (2) |
|
|
880 | (1) |
|
RESTful Web Services with Flex and the Zend Framework |
|
|
881 | (18) |
|
What is a RESTful Web Service? |
|
|
881 | (1) |
|
The Routes Sample RESTful API |
|
|
882 | (4) |
|
Setting Up the Server and Development Environment |
|
|
883 | (3) |
|
Client Software You Might Need |
|
|
886 | (1) |
|
|
886 | (3) |
|
The Flex Sample Application |
|
|
889 | (7) |
|
Retrieving Data from a RESTful Service |
|
|
889 | (5) |
|
Creating and Updating Data with a RESTful Service |
|
|
894 | (2) |
|
Deleting Data from a RESTful Service |
|
|
896 | (1) |
|
|
896 | (3) |
|
Integrating Flex and Java |
|
|
899 | (16) |
|
Introduction to the Routes Web Service |
|
|
899 | (1) |
|
Setting Up the Server and Development Environment |
|
|
900 | (2) |
|
Server Software Requirements |
|
|
900 | (2) |
|
Client Software you Might Need |
|
|
902 | (1) |
|
The Grails Routes Web Service |
|
|
902 | (4) |
|
Grails Code Supporting the Web Service |
|
|
903 | (3) |
|
The Flex Sample Application |
|
|
906 | (7) |
|
The RouteService.as Service Class |
|
|
906 | (1) |
|
|
906 | (3) |
|
Working with Custom Server-Side Errors |
|
|
909 | (4) |
|
|
913 | (2) |
|
Web Services with .NET and Flex |
|
|
915 | (14) |
|
Introduction to the Routes Web Service |
|
|
915 | (1) |
|
Setting Up the Server and Development Environment |
|
|
916 | (2) |
|
Server Software Requirements |
|
|
916 | (2) |
|
Client Software You Might Need |
|
|
918 | (1) |
|
The .NET Routes Web Service |
|
|
918 | (3) |
|
.NET Code Supporting the Web Service |
|
|
918 | (3) |
|
The Flex Sample Application |
|
|
921 | (6) |
|
The Import Web Service (WSDL) Tool |
|
|
922 | (2) |
|
Accessing the Web Service |
|
|
924 | (1) |
|
Working with Custom Server-Side Errors |
|
|
925 | (2) |
|
|
927 | (2) |
|
Offline Data Access with AIR |
|
|
929 | (22) |
|
|
929 | (1) |
|
|
930 | (1) |
|
Synchronous versus Asynchronous |
|
|
930 | (1) |
|
|
931 | (4) |
|
Opening a Database Asynchronously |
|
|
931 | (2) |
|
Opening a Database Synchronously |
|
|
933 | (1) |
|
Working with Data Definition Language |
|
|
933 | (2) |
|
|
935 | (6) |
|
|
936 | (2) |
|
|
938 | (1) |
|
|
939 | (1) |
|
|
940 | (1) |
|
Using Transactions to Import Data |
|
|
941 | (2) |
|
Making Online Data Available for Offline Access |
|
|
943 | (6) |
|
Importing XML into a SQLite Database |
|
|
944 | (4) |
|
Improving the XML to SQLite Importer |
|
|
948 | (1) |
|
Using Third-Party SQLite Database Management Applications |
|
|
949 | (1) |
|
|
949 | (2) |
|
|
951 | (122) |
|
|
953 | (18) |
|
|
953 | (2) |
|
|
955 | (1) |
|
|
955 | (8) |
|
|
956 | (1) |
|
|
956 | (2) |
|
|
958 | (1) |
|
|
959 | (2) |
|
|
961 | (1) |
|
Action Message Format (AMF) |
|
|
962 | (1) |
|
Creating an LCDS Project in Flex Builder |
|
|
963 | (5) |
|
The New Flex Project Wizard |
|
|
963 | (3) |
|
Configuring the Application Server |
|
|
966 | (2) |
|
|
968 | (1) |
|
|
968 | (1) |
|
|
969 | (1) |
|
|
969 | (2) |
|
|
971 | (8) |
|
ColdFusion 8 and Integrated LCDS |
|
|
971 | (4) |
|
LCDS-Specific ColdFusion Installation Screens |
|
|
971 | (2) |
|
LCDS-Specific ColdFusion Administrator Screens |
|
|
973 | (2) |
|
|
975 | (1) |
|
|
976 | (1) |
|
|
976 | (1) |
|
|
976 | (1) |
|
|
977 | (2) |
|
|
979 | (26) |
|
|
979 | (1) |
|
Message Service Technology Explained |
|
|
979 | (2) |
|
|
979 | (1) |
|
|
980 | (1) |
|
Messages Travel through a Channel |
|
|
980 | (1) |
|
Pushing Messages from the Server |
|
|
980 | (1) |
|
Using the Message Service |
|
|
981 | (9) |
|
Configuring a Destination on the Server |
|
|
981 | (2) |
|
Creating Messages on the Client |
|
|
983 | (1) |
|
|
984 | (1) |
|
|
985 | (1) |
|
Declaring Producers and Consumers in MXML |
|
|
986 | (1) |
|
|
987 | (1) |
|
|
988 | (1) |
|
Publishing from the Server |
|
|
988 | (2) |
|
Message Service Applications |
|
|
990 | (14) |
|
|
990 | (3) |
|
|
993 | (4) |
|
|
997 | (7) |
|
|
1004 | (1) |
|
The Data Management Service |
|
|
1005 | (24) |
|
|
1005 | (1) |
|
|
1006 | (2) |
|
All about Domain Modeling |
|
|
1006 | (1) |
|
Create, Read, Update, Delete |
|
|
1006 | (1) |
|
|
1006 | (1) |
|
|
1007 | (1) |
|
|
1008 | (1) |
|
Seeing Is Believing: The Six-Line Demo |
|
|
1008 | (2) |
|
|
1009 | (1) |
|
Declaring a Collection for the Managed Data |
|
|
1009 | (1) |
|
Providing Managed Data to a Data Grid |
|
|
1009 | (1) |
|
|
1009 | (1) |
|
Committing Changes and Synchronizing Clients |
|
|
1010 | (1) |
|
|
1010 | (1) |
|
|
1010 | (1) |
|
|
1010 | (5) |
|
Client and Server Components |
|
|
1010 | (1) |
|
|
1011 | (1) |
|
|
1011 | (1) |
|
|
1012 | (2) |
|
|
1014 | (1) |
|
Client and Server Collaboration |
|
|
1015 | (1) |
|
Example Application: DMS Fleet Tracker |
|
|
1015 | (13) |
|
|
1016 | (3) |
|
|
1019 | (3) |
|
|
1022 | (2) |
|
|
1024 | (3) |
|
|
1027 | (1) |
|
|
1028 | (1) |
|
Advanced Data Management Services |
|
|
1029 | (10) |
|
|
1029 | (1) |
|
Summary-to-Details Modeling |
|
|
1030 | (1) |
|
Replace Lazy Relationship with Get Item |
|
|
1030 | (1) |
|
Overcoming Item-Pending Errors |
|
|
1031 | (2) |
|
|
1032 | (1) |
|
Managing Shared and User-Specific Data |
|
|
1033 | (3) |
|
A Simple Instant Messaging System |
|
|
1033 | (1) |
|
Creating a New MessageDetails Item |
|
|
1034 | (1) |
|
Creating and Delivering the User Messages |
|
|
1034 | (2) |
|
Streaming AMF to an NIO End Point |
|
|
1036 | (1) |
|
|
1036 | (1) |
|
|
1037 | (2) |
|
The Data Services Stress Testing Framework |
|
|
1039 | (14) |
|
|
1039 | (2) |
|
Stress Testing a Data Management Service Application |
|
|
1041 | (8) |
|
|
1041 | (1) |
|
Writing the Test Application |
|
|
1041 | (3) |
|
|
1044 | (2) |
|
Configuring and Starting the Browser Servers |
|
|
1046 | (1) |
|
Compiling the Test Administrator |
|
|
1047 | (1) |
|
|
1047 | (2) |
|
|
1049 | (2) |
|
Parameterizing Test Applications |
|
|
1049 | (1) |
|
Preconfiguring the Test Administrator |
|
|
1049 | (1) |
|
Creating Customized Test Reports |
|
|
1050 | (1) |
|
|
1051 | (2) |
|
|
1053 | (20) |
|
|
1053 | (1) |
|
|
1054 | (2) |
|
Services and Client Components |
|
|
1054 | (1) |
|
Channels of Communication |
|
|
1055 | (1) |
|
|
1055 | (1) |
|
Developing a BlazeDS Project |
|
|
1056 | (15) |
|
Installing the BlazeDS Turnkey |
|
|
1056 | (1) |
|
Creating a Combined Flex/Java Project |
|
|
1057 | (3) |
|
|
1060 | (7) |
|
|
1067 | (4) |
|
|
1071 | (2) |
|
|
1073 | (66) |
|
|
1075 | (8) |
|
|
1075 | (1) |
|
|
1076 | (2) |
|
Understanding the Data Model |
|
|
1076 | (1) |
|
|
1077 | (1) |
|
Understanding the Controller |
|
|
1077 | (1) |
|
Putting the Pieces Together |
|
|
1078 | (1) |
|
|
1078 | (3) |
|
|
1079 | (1) |
|
|
1079 | (1) |
|
|
1079 | (1) |
|
|
1080 | (1) |
|
Is There a Definitive MVC? |
|
|
1080 | (1) |
|
An MVC Approach to Component Architecture |
|
|
1081 | (1) |
|
|
1081 | (2) |
|
Introduction to Cairngorm |
|
|
1083 | (12) |
|
|
1083 | (1) |
|
The Steps of a Cairngorm Interaction |
|
|
1083 | (11) |
|
|
1084 | (1) |
|
|
1085 | (1) |
|
|
1086 | (1) |
|
A Business Function Is Delegated |
|
|
1087 | (2) |
|
A Service Is Located and Invoked |
|
|
1089 | (1) |
|
The Model Is Located and Updated |
|
|
1090 | (2) |
|
The View Reflects the Changes |
|
|
1092 | (2) |
|
|
1094 | (1) |
|
|
1095 | (24) |
|
|
1095 | (1) |
|
|
1096 | (22) |
|
|
1096 | (6) |
|
|
1102 | (2) |
|
|
1104 | (4) |
|
|
1108 | (2) |
|
|
1110 | (3) |
|
|
1113 | (2) |
|
|
1115 | (3) |
|
|
1118 | (1) |
|
|
1119 | (20) |
|
The Presentation Model Pattern |
|
|
1119 | (6) |
|
Using Cairngorm with Presentation Models |
|
|
1120 | (1) |
|
Sample Cairngorm Presentation Model Application |
|
|
1121 | (3) |
|
|
1124 | (1) |
|
|
1125 | (1) |
|
Organizing Cairngorm Projects |
|
|
1125 | (2) |
|
|
1125 | (1) |
|
|
1126 | (1) |
|
|
1127 | (4) |
|
|
1127 | (1) |
|
|
1128 | (1) |
|
|
1129 | (2) |
|
|
1131 | (7) |
|
Logging Cairngorm Events and Commands |
|
|
1131 | (1) |
|
Timing Asynchronous Commands |
|
|
1132 | (1) |
|
Injecting Dependencies into Commands |
|
|
1133 | (2) |
|
Stubbing the Service Layer |
|
|
1135 | (1) |
|
Decentralized Controllers |
|
|
1136 | (1) |
|
|
1137 | (1) |
|
|
1138 | (1) |
|
Part XI: Application Development Strategies |
|
|
1139 | (104) |
|
|
1141 | (20) |
|
|
1141 | (8) |
|
|
1141 | (1) |
|
|
1142 | (1) |
|
|
1142 | (7) |
|
Object-Oriented Principles |
|
|
1149 | (11) |
|
|
1149 | (1) |
|
When to Use Public/Private/Protected/Final Functions |
|
|
1150 | (1) |
|
|
1151 | (7) |
|
|
1158 | (2) |
|
|
1160 | (1) |
|
|
1161 | (10) |
|
Understanding the Security Sandbox |
|
|
1161 | (1) |
|
|
1162 | (5) |
|
|
1167 | (2) |
|
|
1169 | (2) |
|
Modular Application Development |
|
|
1171 | (18) |
|
|
1171 | (1) |
|
|
1172 | (1) |
|
|
1173 | (1) |
|
|
1173 | (1) |
|
Using the Module and ModuleLoader Classes |
|
|
1173 | (14) |
|
Cross-Module Communication |
|
|
1177 | (5) |
|
|
1182 | (5) |
|
|
1187 | (2) |
|
Application Performance Strategies |
|
|
1189 | (14) |
|
Understanding Object Creation Policies |
|
|
1189 | (1) |
|
Structuring Data for Performance |
|
|
1190 | (2) |
|
|
1190 | (1) |
|
Impacts of Multiple Service Invocations |
|
|
1191 | (1) |
|
Managing Event Listeners and Data Bindings |
|
|
1192 | (3) |
|
|
1192 | (2) |
|
Cleaning Up Unused Event Listeners |
|
|
1194 | (1) |
|
Weak Referenced Event Listeners |
|
|
1194 | (1) |
|
Cleaning Up Event Listeners Manually |
|
|
1194 | (1) |
|
Associative Arrays and Dictionaries |
|
|
1195 | (3) |
|
|
1198 | (3) |
|
|
1198 | (1) |
|
|
1198 | (1) |
|
Managing External SWF Content |
|
|
1199 | (1) |
|
Object Caching and Recycling |
|
|
1199 | (2) |
|
|
1201 | (2) |
|
Project Documenting with ASDoc |
|
|
1203 | (12) |
|
|
1203 | (1) |
|
|
1204 | (1) |
|
ASDoc Comments and Formatting |
|
|
1205 | (9) |
|
|
1206 | (1) |
|
|
1206 | (1) |
|
|
1207 | (1) |
|
|
1208 | (1) |
|
|
1209 | (1) |
|
|
1210 | (1) |
|
|
1211 | (1) |
|
Referencing Outside Elements |
|
|
1212 | (1) |
|
Excluding Classes from Generated Output |
|
|
1213 | (1) |
|
Applying Custom Templates |
|
|
1213 | (1) |
|
|
1214 | (1) |
|
Desktop Deployment with AIR |
|
|
1215 | (14) |
|
Code Signing and Certificates |
|
|
1215 | (7) |
|
|
1216 | (2) |
|
Creating and Signing an AIR Package in Flex Builder |
|
|
1218 | (2) |
|
Code Signing with a Developer Certificate |
|
|
1220 | (2) |
|
Package and Signing AIR Applications with the Command Line |
|
|
1222 | (1) |
|
Distributing AIR Applications |
|
|
1222 | (5) |
|
Web Page Badge Installation |
|
|
1223 | (1) |
|
|
1223 | (3) |
|
|
1226 | (1) |
|
Updating AIR Applications |
|
|
1227 | (1) |
|
|
1228 | (1) |
|
Dual Deployment for Flex and AIR |
|
|
1229 | (14) |
|
|
1229 | (9) |
|
|
1231 | (1) |
|
|
1231 | (1) |
|
Setting Up the Flex Builder Projects |
|
|
1232 | (1) |
|
Referencing the MainAppEntryPoint Component |
|
|
1233 | (2) |
|
Working with the IApplicationPersistence Interface |
|
|
1235 | (1) |
|
Working with the ApplicationPersistenceFactory |
|
|
1235 | (3) |
|
Using Conditional Compilation |
|
|
1238 | (3) |
|
|
1238 | (1) |
|
|
1238 | (1) |
|
Overview of the Conditional Compilation Approach |
|
|
1238 | (1) |
|
Looking at the ApplicationPersistence File |
|
|
1239 | (1) |
|
Configuring the Flex Compiler |
|
|
1240 | (1) |
|
|
1241 | (2) |
|
Part XII: Testing and Debugging |
|
|
1243 | (112) |
|
Debugging Flex Applications |
|
|
1245 | (22) |
|
|
1245 | (1) |
|
|
1245 | (1) |
|
The Flex Builder Debugging Perspective |
|
|
1246 | (9) |
|
|
1246 | (3) |
|
Launching an Application in Debug Mode |
|
|
1249 | (1) |
|
|
1250 | (2) |
|
Examining Application State |
|
|
1252 | (3) |
|
The Command-Line Debugger |
|
|
1255 | (1) |
|
Additional Debugging Techniques |
|
|
1255 | (10) |
|
Debugging Java Server-Side Code |
|
|
1255 | (2) |
|
Monitoring Internet Traffic |
|
|
1257 | (2) |
|
Application-Specific Debugging |
|
|
1259 | (1) |
|
Making the Most of Logging |
|
|
1259 | (1) |
|
|
1260 | (2) |
|
Adobe Public Bug Database and Issue Reporting System |
|
|
1262 | (3) |
|
|
1265 | (2) |
|
|
1267 | (36) |
|
|
1267 | (1) |
|
|
1268 | (1) |
|
|
1268 | (3) |
|
Performance Profiling and Optimization Best Practices |
|
|
1268 | (2) |
|
|
1270 | (1) |
|
Performance Profiling Basics |
|
|
1270 | (1) |
|
|
1270 | (1) |
|
|
1271 | (21) |
|
The Profiling Perspective |
|
|
1271 | (1) |
|
|
1272 | (4) |
|
Using the Memory Profiler |
|
|
1276 | (8) |
|
Using the Performance Profiler |
|
|
1284 | (3) |
|
Filtering in the Profiler |
|
|
1287 | (2) |
|
Saving and Loading Profiling Data |
|
|
1289 | (1) |
|
|
1290 | (2) |
|
|
1292 | (8) |
|
Using the Memory Profiler to Detect Leaks |
|
|
1292 | (4) |
|
Using the Performance Profiler to Optimize an Algorithm |
|
|
1296 | (4) |
|
Creating Your Own Profiler |
|
|
1300 | (1) |
|
|
1301 | (2) |
|
Unit Testing and Test-Driven Development with FlexUnit |
|
|
1303 | (24) |
|
|
1303 | (1) |
|
|
1304 | (1) |
|
Preventing Bugs in the First Place |
|
|
1304 | (1) |
|
Gaining the Confidence to Refactor |
|
|
1304 | (1) |
|
Driving Improvements in Design |
|
|
1304 | (1) |
|
Writing Testable Software |
|
|
1304 | (1) |
|
Happy Developers and Effortless Documentation |
|
|
1305 | (1) |
|
Technology and Terminology |
|
|
1305 | (2) |
|
|
1305 | (1) |
|
Unit Tests, Test Cases, and Test Suites |
|
|
1306 | (1) |
|
|
1306 | (1) |
|
Test-Driven Development by Example |
|
|
1307 | (11) |
|
Preparing for Unit Testing |
|
|
1307 | (1) |
|
|
1308 | (1) |
|
|
1308 | (1) |
|
|
1309 | (1) |
|
|
1310 | (3) |
|
|
1313 | (2) |
|
Setting Up and Tearing Down |
|
|
1315 | (2) |
|
|
1317 | (1) |
|
|
1318 | (6) |
|
|
1318 | (1) |
|
Removing Dependencies with Mock Objects |
|
|
1318 | (4) |
|
Continuous Integration with Ant and Maven |
|
|
1322 | (1) |
|
|
1323 | (1) |
|
|
1323 | (1) |
|
Behavior-Driven Development |
|
|
1324 | (1) |
|
|
1324 | (3) |
|
|
1327 | (16) |
|
|
1327 | (1) |
|
Using the Logging Framework |
|
|
1328 | (3) |
|
Creating a Logging Target |
|
|
1328 | (1) |
|
|
1328 | (1) |
|
Logging at Different Levels |
|
|
1329 | (1) |
|
|
1330 | (1) |
|
|
1330 | (1) |
|
Customizing the Logging Framework |
|
|
1331 | (4) |
|
Implementing a Remote Logging Target |
|
|
1331 | (1) |
|
Implementing the Java Remote Logger |
|
|
1332 | (2) |
|
Creating a Client that Logs Remotely |
|
|
1334 | (1) |
|
|
1335 | (7) |
|
|
1335 | (2) |
|
|
1337 | (2) |
|
Logging to Firebug with ThunderBolt |
|
|
1339 | (2) |
|
Removing Logging from Production Code |
|
|
1341 | (1) |
|
|
1342 | (1) |
|
|
1343 | (12) |
|
|
1343 | (1) |
|
|
1344 | (2) |
|
|
1344 | (1) |
|
|
1345 | (1) |
|
Runtime or Compile-Time Automation |
|
|
1345 | (1) |
|
|
1346 | (1) |
|
Automating a Simple Application |
|
|
1346 | (7) |
|
Installing an Automation Tool |
|
|
1347 | (1) |
|
Creating a Testable Application |
|
|
1347 | (1) |
|
|
1348 | (1) |
|
|
1349 | (3) |
|
|
1352 | (1) |
|
|
1353 | (1) |
|
Automating Custom Components |
|
|
1353 | (1) |
|
|
1353 | (1) |
|
|
1354 | (1) |
|
Appendix A: ActionScript Language Comparison |
|
|
1355 | (10) |
|
Runtime Environment Concerns |
|
|
1355 | (2) |
|
|
1355 | (1) |
|
|
1355 | (1) |
|
|
1356 | (1) |
|
|
1356 | (1) |
|
The Notion of Global Variables |
|
|
1357 | (1) |
|
|
1357 | (1) |
|
|
1357 | (3) |
|
|
1357 | (2) |
|
|
1359 | (1) |
|
|
1359 | (1) |
|
|
1360 | (1) |
|
|
1360 | (1) |
|
|
1360 | (3) |
|
Classes, Filenames, and Packages |
|
|
1360 | (1) |
|
|
1361 | (1) |
|
|
1362 | (1) |
|
|
1362 | (1) |
|
|
1362 | (1) |
|
|
1363 | (2) |
Index |
|
1365 | |