Siêu thị PDFTải ngay đi em, trời tối mất

Thư viện tri thức trực tuyến

Kho tài liệu với 50,000+ tài liệu học thuật

© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

mastering dojo
PREMIUM
Số trang
545
Kích thước
11.3 MB
Định dạng
PDF
Lượt xem
1399

mastering dojo

Nội dung xem thử

Mô tả chi tiết

What readers are saying about Mastering Dojo

I’m so glad to see this book released. Dojo has a lot of power, but

there’s also a lot of complexity to knowing which API methods to use

when, and how to use them, and this book goes beyond just explain￾ing the Dojo API to explaining what developers need to know to use it

effectively.

Bill Keese

Project lead for Dijit

IBM, Emerging Technology Group

Mastering Dojo will teach you how to build an Internet application

that will impress your end users and delight you while you’re writing

it. The book also explains Dojo’s JavaScript underpinnings, both for

newcomers and for refugees from other languages.

Ian Dees

Software engineer

The book really rolls out the red carpet for Dojo to emerge with guns

blazing! The authors show you how easy it is to use impressive

widgets without installing a thing. I was amazed to discover that

JavaScript is not just a toy language, how Dojo is built on top of it,

and how both are invaluable in any web development project. Buy

this book. It’s the next best thing to having the authors working at

your side.

Brian C. Reeve

Application developer, bluecomIT.com

Mastering Dojo is an understandable, in-depth guide to learning the

Dojo Toolkit. It’s a great supplement to the Dojo Toolkit’s online docu￾mentation.

Steve Orvell

Senior Engineer, WaveMaker Software

Mastering Dojo

JavaScript and Ajax Tools

for Great Web Experiences

Rawld Gill

Craig Riecke

Alex Russell

The Pragmatic Bookshelf

Raleigh, North Carolina Dallas, Texas

Many of the designations used by manufacturers and sellers to distinguish their prod￾ucts are claimed as trademarks. Where those designations appear in this book, and The

Pragmatic Programmers, LLC was aware of a trademark claim, the designations have

been printed in initial capital letters or in all capitals. The Pragmatic Starter Kit, The

Pragmatic Programmer, Pragmatic Programming, Pragmatic Bookshelf and the linking g

device are trademarks of The Pragmatic Programmers, LLC.

The Browser Application Framework code is Copyright © 2000-2008, Vista Information

Technologies, Inc., and released under the BSD license.

Every precaution was taken in the preparation of this book. However, the publisher

assumes no responsibility for errors or omissions, or for damages that may result from

the use of information (including program listings) contained herein.

Our Pragmatic courses, workshops, and other products can help you and your team

create better software and have more fun. For more information, as well as the latest

Pragmatic titles, please visit us at

http://www.pragprog.com

Copyright © 2008 Rawld Gill, Craig Riecke and Alex Russell.

All rights reserved.

No part of this publication may be reproduced, stored in a retrieval system, or transmit￾ted, in any form, or by any means, electronic, mechanical, photocopying, recording, or

otherwise, without the prior consent of the publisher.

Printed in the United States of America.

ISBN-10: 1-934356-11-5

ISBN-13: 978-1-934356-11-1

Printed on acid-free paper with 50% recycled, 15% post-consumer content.

Contents

1 Introduction 9

1.1 Key Aspects of Dojo . . . . . . . . . . . . . . . . . . . . . 12

1.2 Using the Book . . . . . . . . . . . . . . . . . . . . . . . 15

1.3 Acknowledgments . . . . . . . . . . . . . . . . . . . . . . 17

I Ajax the Dojo Way 19

2 Powerful Web Forms Made Easy 20

2.1 What Customers Are Saying About Your Form . . . . . 21

2.2 Installing Dojo on Your Own Server . . . . . . . . . . . . 21

2.3 Adding Dojo and Dijit to a Page . . . . . . . . . . . . . . 22

2.4 Laying Out the Form . . . . . . . . . . . . . . . . . . . . 26

2.5 Improved Form Controls . . . . . . . . . . . . . . . . . . 31

2.6 Wrapping It Up . . . . . . . . . . . . . . . . . . . . . . . 34

3 Connecting to Outside Services 37

3.1 Dojo Remote Scripting . . . . . . . . . . . . . . . . . . . 37

3.2 JavaScript Idioms for Calling XHR . . . . . . . . . . . . 39

3.3 A Wish List with dojo.data and dojox.grid.Grid . . . . . . 46

3.4 Researching Cigars Using JSONP . . . . . . . . . . . . . 56

3.5 Reviews with dojo.xhrGet . . . . . . . . . . . . . . . . . 63

3.6 Errors and Debugging . . . . . . . . . . . . . . . . . . . 67

II The Dojo APIs 70

4 Dojo In Depth 71

4.1 Modularizing JavaScript . . . . . . . . . . . . . . . . . . 71

4.2 Dojo Source Code Organization . . . . . . . . . . . . . . 75

4.3 Loading Dojo . . . . . . . . . . . . . . . . . . . . . . . . . 78

CONTENTS 6

5 JavaScript Language Extensions 83

5.1 Binding with dojo.hitch . . . . . . . . . . . . . . . . . . . 83

5.2 JavaScript 1.6 Array Methods . . . . . . . . . . . . . . . 90

5.3 Support for Polymorphism . . . . . . . . . . . . . . . . . 94

5.4 Combining, Structuring, and Copying Objects . . . . . 96

6 Asynchronous Programming 101

6.1 Programming DOM Events with Dojo . . . . . . . . . . . 101

6.2 Connecting to User-Defined Events with Dojo . . . . . 117

6.3 Publish-Subscribe . . . . . . . . . . . . . . . . . . . . . . 120

6.4 Managing Callbacks with dojo.Deferred . . . . . . . . . 123

7 DOM Utilities 140

7.1 Core Dojo DOM Utility Functions . . . . . . . . . . . . . 140

7.2 Finding and Editing Nodes . . . . . . . . . . . . . . . . . 145

7.3 Inserting, Moving, and Deleting DOM Nodes . . . . . . 158

7.4 Positioning DOM Nodes . . . . . . . . . . . . . . . . . . 161

7.5 Animation . . . . . . . . . . . . . . . . . . . . . . . . . . 168

8 Remote Scripting with XHR, script, and iframe 178

8.1 Native Remote Scripting . . . . . . . . . . . . . . . . . . 178

8.2 Using the Dojo XHR Framework . . . . . . . . . . . . . 180

8.3 Remote Scripting with script . . . . . . . . . . . . . . . . 199

8.4 Remote Scripting with iframe . . . . . . . . . . . . . . . 207

8.5 Leveraging Remote Scripting to Access Web Services . 211

8.6 Bookmarking and the Back Button Without Navigating 218

9 Defining Classes with dojo.declare 225

9.1 Why Use Object-Oriented Programming in JavaScript? 225

9.2 Defining a Simple Class . . . . . . . . . . . . . . . . . . 226

9.3 Defining a Subclass with Single Inheritance . . . . . . 234

9.4 Mixins and Multiple Inheritance . . . . . . . . . . . . . 239

9.5 Preprocessing Constructor Arguments . . . . . . . . . . 248

9.6 Resolving Property Name Clashes . . . . . . . . . . . . . 252

9.7 Two-Phase Construction . . . . . . . . . . . . . . . . . . 255

9.8 Creating Custom Objects Without Constructors . . . . 257

10 dojo.data 260

10.1 The Big Picture . . . . . . . . . . . . . . . . . . . . . . . 261

10.2 dojo.data and Incremental Search . . . . . . . . . . . . 268

10.3 Partitioning with QueryReadStore . . . . . . . . . . . . 272

10.4 Calling Read Methods from JavaScript . . . . . . . . . . 275

10.5 A Yahoo Search Driver . . . . . . . . . . . . . . . . . . . 280

CONTENTS 7

11 The Dojo Loader and Build System 286

11.1 The Big Picture . . . . . . . . . . . . . . . . . . . . . . . 287

11.2 The Dojo Loader . . . . . . . . . . . . . . . . . . . . . . . 290

11.3 Optimizing Deployment with the Dojo Build System . . 299

11.4 Compressing JavaScript Resources with Dojo-Rhino . 313

III Advanced Dijit 318

12 Scripting Widgets 319

12.1 What Exactly Is a Widget? . . . . . . . . . . . . . . . . . 319

12.2 Finding and Manipulating Declarative Widgets . . . . . 322

12.3 Creating Instances Programmatically . . . . . . . . . . 327

12.4 Extension Points . . . . . . . . . . . . . . . . . . . . . . 331

12.5 Example: Live Forms . . . . . . . . . . . . . . . . . . . . 338

13 Tree 341

13.1 A Simple Tree . . . . . . . . . . . . . . . . . . . . . . . . . 341

13.2 Hierarchical Data Stores . . . . . . . . . . . . . . . . . . 344

13.3 Extension Points . . . . . . . . . . . . . . . . . . . . . . 349

13.4 Manipulating the Tree . . . . . . . . . . . . . . . . . . . . 351

13.5 Drag and Drop . . . . . . . . . . . . . . . . . . . . . . . . 356

14 Grid 366

14.1 Grid Display and Design . . . . . . . . . . . . . . . . . . 367

14.2 Programmatic Structures . . . . . . . . . . . . . . . . . 372

14.3 Extension Points . . . . . . . . . . . . . . . . . . . . . . 375

14.4 Cell Editing . . . . . . . . . . . . . . . . . . . . . . . . . . 385

14.5 Grid Manipulation . . . . . . . . . . . . . . . . . . . . . . 389

15 Form Controls 394

15.1 Form Control Features . . . . . . . . . . . . . . . . . . . 394

15.2 Streamlined Editing . . . . . . . . . . . . . . . . . . . . . 397

15.3 Feedback . . . . . . . . . . . . . . . . . . . . . . . . . . . 405

15.4 Dates, Numbers, and i18n . . . . . . . . . . . . . . . . . 409

15.5 Action Buttons, Toolbars, and Menus . . . . . . . . . . 418

15.6 A11y . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422

16 Dijit Themes, Design, and Layout 428

16.1 Theme Structure . . . . . . . . . . . . . . . . . . . . . . 428

16.2 Changing Look and Feel . . . . . . . . . . . . . . . . . . 435

16.3 A11y and Themes . . . . . . . . . . . . . . . . . . . . . . 440

16.4 Panes: ContentPane and TitlePane . . . . . . . . . . . . 442

CONTENTS 8

16.5 The Alignment Container: BorderContainer . . . . . . . 447

16.6 Stack Containers . . . . . . . . . . . . . . . . . . . . . . 451

17 Creating and Extending Widget Classes 455

17.1 Widget Classes Using dijit.Declaration . . . . . . . . . . 456

17.2 Widget Classes Using dojo.declare . . . . . . . . . . . . 461

17.3 The Widget Life Cycle . . . . . . . . . . . . . . . . . . . . 466

17.4 Extending Widgets . . . . . . . . . . . . . . . . . . . . . 469

17.5 Example: A Yahoo Answers Widget . . . . . . . . . . . . 470

IV Rich Internet Applications 476

18 Building a Rich Internet Application 477

18.1 The Big Picture . . . . . . . . . . . . . . . . . . . . . . . 477

18.2 Step 1: Create the Application Skeleton . . . . . . . . . 486

18.3 Step 2: The Main Menu and Command System . . . . . 491

18.4 Step 3: A Custom Statusbar Widget . . . . . . . . . . . 499

19 Adding Dynamic Content to an RIA 505

19.1 Step 4: The Navigator Pane and On-Demand Data Store 505

19.2 Step 5: Workspace Objects . . . . . . . . . . . . . . . . . 515

20 Going Forward 529

20.1 Foundations . . . . . . . . . . . . . . . . . . . . . . . . . 529

20.2 Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . 531

20.3 Dojo Data and Storage . . . . . . . . . . . . . . . . . . . 532

V Appendixes 533

A Bibliography 534

Index 536

Oh Kate, nice customs curtsy to great kings. Dear Kate, you

and I cannot be confined within the weak list of a country’s

fashion. We are the makers of manners.

William Shakespeare, Henry V

Chapter 1

Introduction

There’s a new king in town.

Over the past couple of years we’ve seen new technologies redefine the

rules of server-side web app development. It’s the client’s turn. Get

ready to throw out your current “customs” of client-side development.

With Dojo, we’re entering a new era of browser-based applications.

Dojo is a set of tools that helps you build better browser-based applica￾tions. Dojo is built mostly using client-side JavaScript, and it expands

the capabilities of the modern browser (and even Internet Explorer) far

enough that the line between local, native applications and browser￾based applications has all but disappeared.

This is a pretty significant statement. It means that browser-based

(and, therefore, web-based) user interfaces can be made indistinguish￾able from those included with the best local, native applications. And it

means that the user interface of local applications can be implemented

in the browser rather than through one of the heavy, platform-sensitive,

and complex native GUI frameworks (Windows, Tk, Qt, Fox, AWT, SWT,

Swing, Cocoa, and the rest).

The ubiquitous browser becomes the user interface platform. It no

longer matters where the back end lives: on a network of distant HTTP

servers or in a small local program that implements the HTTP protocol.

Unfortunately, the “modern” browser provides an incomplete, incon￾venient, and incompatible programming environment. You could get

around these problems using a plug-in such as ActionScript, but this

breaks an important rule: locally installed software is strictly forbidden.

CHAPTER 1. INTRODUCTION 10

Although it may be OK to break this rule for a local application, it is

certainly not OK to break it for a web-based application.1 Enter Dojo.

Dojo fixes browser defects such as browser incompatibilities and mem￾ory leaks, and it adds important capabilities such as HTML user inter￾face controls and DOM querying. Although many JavaScript libraries

are available, most focus on one particular idea. Some include effects

libraries, others concentrate on perceived core JavaScript omissions,

and still others implement one or more HTML widgets (user interface

controls). In contrast, Dojo addresses all of these functional areas—and

many others—extensively. In this respect, we say that Dojo has breadth

and depth unlike any other open source solution.

For example, looking at Dojo’s depth, Dojo normalizes the event system

among the popular browsers (Internet Explorer does not implement the

W3C event model, and it leaks memory; most other browsers do the

opposite). If you want to connect to a click event in Dojo, you can write

the following:

dojo.connect(myButton, "click", myFunction);

This code will work perfectly on any supported browser. You can include

a tree control on a web page by writing this:

<div dojoType="dijit.Tree" label="Order" id="ordTree" store="ordJson" ></div>

This is quite a bit easier than what’s required in many native frame￾works.

Dojo also has incredible breadth. It includes some forty user interface

controls, a graphics framework, cometd support,2 a packaging system,

and much more. Today, Dojo stands alone in its vast capabilities.

You may be concerned that all of this capability implies increased com￾plexity. We think the opposite it true—at least if you compare apples to

apples. Dojo is organized into a hierarchy of functionality. This allows

you to focus on just the area you need for the current work at hand.

As your needs change and expand, Dojo will be ready to answer those

needs precisely because of its breath and depth. Contrast this to a

smaller, less-ambitious library. Although such an alternative may be

1. In the corporate world, installing anything on company computers is a big deal. If

you eliminate this road block, you can instantly open markets that were previously

untouchable.

2. Cometd is a low-latency communications technique that allows the server to push

data to the browser. See http://cometd.com/.

CHAPTER 1. INTRODUCTION 11

Buzzwords

The terms Ajax, Web 2.0, and Rich Internet Application (RIA) are

so popular these days that sometimes it is not completely clear

what they mean. Given what we can do with modern browser

programming techniques, Ajax has come to mean “the way

we do modern web apps.” That’s the way we use it. Web 2.0 is

as much a business strategy as a technical term. We’ll avoid it.

Finally, a local, browser-based application that communicates

with an on-host HTTP server is usually considered an example

of an RIA, yet such a program isn’t an Internet application. But

the word is pervasive, so we’ll use it. When we do, we mean a

mostly single-page, browser-based application. Ahh, precision.

easier to digest on day one (and we dispute even this), three or six

months later when you need a capability that the library does not pro￾vide, you are left with either learning another library or implementing

something yourself. Both of these choices imply much more complexity

and cost than using Dojo from the beginning.

Further, one of the core values of the Dojo contributor community is

“beat down complexity.” All key attributes of Dojo’s design have been

vigorously debated, implemented and reimplemented, tested, and used

with this value in mind. Rather than ignore defects and build beautiful

new buildings on sinking swamp land, the Dojo community has mixed

the mature, rational, even skeptical engineer’s approach with the fast￾moving forward thinking of the young hacker. There is real substance

behind these words: the community spent most of 2007 refactoring the

core system. This is surely a sign of commitment to excellence and pro￾fessionalism, which can sometimes be missing in open source projects.

Finally, you should know that Dojo is not an academic project. It’s being

used in hundreds of projects at hundreds of companies. Navigate to

http://www.myaol.com, and hit View Source. Dojo is there. IBM is a major

contributor to the Dojo foundation—and is using Dojo in its WebSphere

stack. BEA and Sun ship Dojo with their products. With this kind of

Fortune 100 usage and sponsorship, you can be sure that Dojo is here

for the long haul.

KEY ASPECTS OF DOJO 12

1.1 Key Aspects of Dojo

Let’s survey the broad landscape that is Dojo.

Not Just a Library—A Toolkit

Dojo is a collection of static, client-side JavaScript scripts. There is no

client-side plug-in or server-side components. It includes the following:

• A design and implementation that normalizes the browser, allow￾ing the same source code to work in several browsers (no more

browser/feature sniffing and resulting browser-dependent code).

• Functions/libraries that abstract the sometimes-obtuse, arcane,

and inconvenient W3C DOM programming model into a conve￾nient, parsimonious, efficient interface.

• Functions/libraries that fix several gross browser errors such as

memory leaks; others that provide functionality likely to be avail￾able natively in the browser in a few years—today!

• A library of arguably the largest single set of HTML widgets avail￾able today.

• A module system coupled with a build system that lets you divide

code into small, manageable chunks during development and later

package the release system for optimal download performance—

without any modifications to the source code. The build system

even lets you slice and dice Dojo itself in a way that’s optimal for

your project.

• Independent libraries (that is, you can load them on demand) that

implement several other advanced capabilities.

Several of the libraries result in frameworks for the following:

• Building custom HTML widgets

• Internationalization (i18n)

• Localization (l10n)

• Accessibility (a11y)

Dojo also includes a utility application called the build system that

packages large projects that may include hundreds of files into small,

optimal sets of compressed files for deployment on production servers.

KEY ASPECTS OF DOJO 13

At the time of this writing, Dojo officially supports Internet Explorer

(6+), Firefox (1.5+), Safari (3+), and Opera (9+, Dijit doesn’t support

Opera).

Since Dojo is pure JavaScript, it can be used in nonbrowser, Spider￾Monkey-embedded, and Rhino-embedded environments. Of course,

much of Dojo—anything that leverages HTML, CSS, and/or XHR—is

not applicable in these environments. Still, there is an inner core of

functionality that is useful. The loader, language extensions, asynchro￾nous programming, object-oriented programming, and Common Locale

Data Repository functionality depend upon nothing but JavaScript and

can be used in these nonbrowser environments.3

Dojo Targets a Wide Audience

Dojo aggressively targets a broad range of users, from designers of sim￾ple web sites through enterprise application developers. This is a very

tough requirement to get right since design decisions that are optimal

for one group are often less so for another. Most “web design” tasks can

be accomplished by simply loading the script dojo.js. In this respect,

Dojo is as lightweight and easy to use as the best competing libraries.

On the other hand, larger projects require more. Dojo includes machin￾ery to load different function families upon demand. This design gives

Dojo users the luxury of digesting exactly as much complexity as they

need to solve the problem at hand.

Dojo Targets the Future

The state of the browser-based programming environment is another

major force behind Dojo’s philosophy and content. If the browsers were

standards-compliant (or, at least compatible), if JavaScript and the

DOM API fixed some glaring shortcomings, and if HTML included user

interface controls more modern than 1989, then much of Dojo wouldn’t

be required. The architects of Dojo recognize that, eventually, these

defects will be fixed. And when native functionality becomes available,

you’ll want to use it rather than a scripted alternative. Dojo was created

to solve key defects in the browser-based programming environment so

that modern, highly capable programs (indeed, programs rivaling native

applications) can be targeted to the browser—while preparing for a for￾ward upgrade path as the native browser environment improves.

3. Using Dojo outside the browser is beyond the scope of this book.

KEY ASPECTS OF DOJO 14

Since browsers won’t be fixed in a single flash, Dojo’s modular design

can hook into these facilities directly—on a per-facility/per-browser

level—as they become available. In short, Dojo provides a stable,

browser-based programming environment, even as we enter the next

round of browser wars.

Dojo Is Open Source

The source code is free and available. It is dual-licensed under either

the terms of the modified BSD license or the Academic Free License

version 2.1. The BSD license is very friendly to commercial products;

it allows you to use or modify Dojo in your own commercial products

without any requirement to open source anything that you do. Nat￾urally, you can change whatever you want for such products. (Heck,

under the BSD license, you could sell unmodified copies of Dojo.)

The development process is rigorous and open. Source code is main￾tained in an SVN repository; defects and enhancements are tracked

by Trac. Anonymous access is available to both. Coding style guide￾lines are enforced, and code must be accompanied by unit tests prior

to inclusion in the key release sets.

There are avenues of free support through forums and mailing lists as

well as companies that provide for-fee services.

Unlike many open source projects, Dojo is backed by a foundation. The

Dojo Foundation is a 501(c)(6) nonprofit organized to help promote the

adoption of Dojo and to provide a healthy environment for JavaScript

engineering of every stripe. One of the key benefits that the foundation

affords is the ability to insulate users from hidden liabilities (for exam￾ple, patent or copyright infringement) regarding the use of the code.

All things Dojo discussed here start at http://dojotoolkit.org/.

Dojo Is Divided Into Three Projects

Dojo includes three projects:

• Dojo: The foundation upon which everything else is built. Alto￾gether, it includes about fifty JavaScript scripts and several other

resources that handle browser normalization, JavaScript modu￾larization, extensions to the core JavaScript library, extensions to

the W3C DOM API (including a parsing and querying the DOM),

remote scripting, Firebug Lite, drag and drop, a data store API,

USING THE BOOK 15

localization and internationalization, and a few other miscella￾neous functions.

• Dijit: The Dojo widget framework and built-in widgets (about forty

HTML user interface widgets).

• Dojox: Dojo extensions. This includes everything from the grid

widget to graphics libraries. Dojox is the Wild West of Dojo—there

are some very sophisticated and stable libraries that are currently

deployed in real-world, for-profit systems as well as some com￾pletely experimental systems. Each library includes a readme that

describes the project.

Each of these three projects resides in its own source code tree. Typi￾cally Dojo and Dijit coordinate releases; so far, Dojox has released with

Dojo and Dijit, but this may change in future releases. We’ll cover Dojo

and Dijit exhaustively in this book while only touching on a couple

Dojox projects.

Dojo Has a High Degree of Conceptual Integrity

Despite the size of Dojo, the design and implementation possess a

high degree of conceptual integrity. In Fred Brooks’ classical software

engineering tome The Mythical Man-Month [Bro95], Brooks postulates

that conceptual integrity (the ratio of functionality to complexity) is the

most important attribute of any programming project. This is a well￾established and frequently missing attribute of long-lived software. We

already noted that beating down complexity is one of the Dojo project’s

core values. Further, the Dojo and Dijit project trees are each man￾aged by a single individual who guides and coordinates project evolu￾tion. This fulfills another of Brooks’ requirements to achieve conceptual

integrity—designating a single system architect. Finally, as we explore

Dojo, you’ll see that it just feels right. It seems to surprise the least...to

be natural.4 All of these are attributes of high conceptual integrity.

1.2 Using the Book

Here are a few last preliminary remarks that will help you maximize the

value of the book.

4. Although Dojo is mature, like any significant software system, it isn’t perfect. We’ll

occasionally point out weaknesses.

Tải ngay đi em, còn do dự, trời tối mất!