Welcome!

You will be redirected in 30 seconds or close now.

ColdFusion Authors: Yakov Fain, Jeremy Geelan, Maureen O'Gara, Nancy Y. Nee, Tad Anderson

Related Topics: ColdFusion

ColdFusion: Article

Introducing Spry

The promising pre-release of Adobe's AJAX framework

If you've been to Adobe Labs lately or keep up with the blogosphere you've probably heard the buzz about Spry. It's a new AJAX framework from Adobe.

It lets designers build rich Internet applications with little or no programming. The Adobe-Macromedia combine has been pushing RIAs for years and its vision is just now moving into the mainstream.

Adobe had three goals when creating Spry: open access, easy use, and enable innovation.

Open Access
Propriety tags or server-side code weren't used in the Spry framework, instead the capabilities of existing HTML tags were enhanced. Spry has been released under a BSD license and it's freely available on the Adobe Labs site.

Easy-To-Use
Spry was created with designers in mind. It uses regular HTML tags, CSS, and JavaScript. Very little coding is required, although its capabilities can certainly be enhanced with coding. The syntax reminds me of how ColdFusion integrates into Web pages as a tag-based language. You use the tags you're already familiar with, but with new properties. Adobe certainly accomplished its goal; Spry is very easy to use.

Enable Innovation
Enabling innovation is one of those warm and fuzzy goals. In this case what it's trying to do is give developers the ability to create rich applications while still allowing them freedom of design.

All that sounds great, but what is it really? Spry boils down to a couple of JavaScript libraries that you include in your Web page. Just a couple and you can be adding dynamic interactive content to your site. It can't be that easy you say, but it really is.

Loading Data in Spry
The two main JavaScript libraries that have to be included are xpath.js and spryData.js. The xpath.js is the Google implementation of XPath 1.0; spryData.js is the Spry library itself. Once these two files are included in your page Spry is enabled. Of course just enabling Spry doesn't do anything. You have to load some data and display it. Once you're Spry-enabled you can dynamically load data. This is one of the core features of the framework and is done by creating a Spry XMLDataSet. Right now XML is the only type of data supported, but there are plans to support other formats in the future. The sample below shows the code needed to enable Spry and load some data:

<script type="text/javascript" src="xpath.js"></script>
<script type="text/javascript" src="SpryData.js"></script>
<script type="text/javascript">
      var mydata=new Spry.Data.XMLDataSet("mydata.xml","/people/person");
</script>

Two pieces of information are need to load data into the Spry, the URL of the file you're loading and an xpath statement to select from the data that's returned. I used an XML file in the sample, but it could just as easily have been a dynamic file such as ColdFusion page that returns data from a database.

When using ColdFusion make sure you include a <cfcontent type="text/xml"> or Spry won't read the data. This has tripped server people up (include me) the first time they tried to retrieve data from a ColdFusion page. The URL can access data from anywhere, but it will generate a warning or may disallow loading data from other sites depending on the browser security settings. The xpath statement lets you filter the data that's retrieved. This is required even if the only thing you're selecting is the root node of the XML. Using the same data source you can select different XML nodes or search for a specific node or series of nodes in the XML.

Displaying Data in Spry
Once we have the data we want to display it. For this example I'm assuming we return a list of people with firstname, lastname, and e-mail as the fields. To output data you have to define a Spry Region. This is done by adding the attribute spry:region="dataset" to the tag such as a div that encloses the area using the dataset. This lets Spry know that it should update this area of the page if the specified dataset changes. The data output is very similar to data binding in Flex and has similarities to ColdFusion except with curly brackets and colons instead of hash marks. For instance, to output the first name returned in our data set the syntax would be {mydata::firstname}. Much like a ColdFusion query this would display the firstname field of our dataset from the first row of data. What we need to go with this is the ability to loop over a dataset when multiple data items are returned. This is done using the spry:repeat tag. But for a couple of minor differences, the syntax should feel familiar to you if you've been using ColdFusion. You don't use an output tag, you just embed it in the tag you want to loop with. The example below demonstrates how the tag would be use to display a table with our data:

<div spry:region="mydata">
<table>
<tr>
<th>First Name</th><th>Last Name</th><th>Email</th>
</tr>
<tr spry:repeat="mydata">
<td>{firstname}</td><td>{lastname}</td><td>{email}</td>
</tr>
</table>
</div>

This example is creating a table, but the same technique can be used to create other dynamic elements such as a select box by putting the SpryRepeat in the option tag. It makes chores like have multi-select boxes where the items in the second box depend on the item chosen on the first a breeze. You can update the second box without reloading the page by changing the URL of the data source for the second dataset. For instance, I could add a button that updated the data source to my table example:

<input type="button" onClick="mydata.setURL('mydata2.xml')">

When you click on the button the XML data would be read from a different file and the table would automatically update without reloading the page. You're not limited to text, you can bind the src attribute of an image to a Spry data field and the image will automatically be updated when the data changes.

Other Capabilities
The dynamic data capabilities are the core of the Spry framework, but this is still a pre-release of the technology. Though it's not covered in the documentation, there are two other Spry libraries included as part of the demos: SpryAccordion.js and SpryEffects.js. SpryAccordion.js contains code to produce an accordion-style menu. SpryEffects.js contains code for animation effects such as Move, Size, and Opacity. I expect these libraries will be expanded to include a full set of dynamic UI components and animation effects.

Limitations
All this dynamic functionality sounds great and you may be tempted to jump right in and start making Spry-based Web pages, but there are some limits you should keep in mind when working with Spry. Spry is AJAX-based and as such has the same limitations as AJAX. It can't work without JavaScript. If a user has JavaScript turned off your page won't work, not only that but the data might be inaccessible. If you were to browse to the sample used in this article with JavaScript turned off, you would just see a table with the variables in it. There would be no way for you get to the data.

This situation is of concern to the Spry team too and the latest release includes documentation on how to make your page usable even if Spry can't run. Since we're dealing with JavaScript you face the dreaded JavaScript-compatibility issues. Spry has been tested with Firefox 1.5 (Windows and Mac), Netscape 7.2 (Windows), Internet Explorer 6 (Windows), and Safari 2.0.3 (Mac). If you're not using one of these browsers, don't count on Spry working. It may not work at all or you may only have partial functionality. You also have the accessibility issues that come with dynamic Web content. Most screen readers do a poor job or just don't work with dynamic updates in Web pages.

Also keep in mind that Spry is in pre-release. The code could change at any time and it's not guaranteed to be backwards-compatible. There are already differences between the May and June releases. For instance, the format of the Spry Region attribute was changed from spryregion to spry:region. A minor difference, but it broke the code I had written and I had to update the examples in this article.

Where Is Spry Going?
The future of Spry is up in the air at this point. This is a pre-release of the code, not even an alpha or beta. The Spry team isn't event sure where it's going. They want feedback from the community to help with Spry's direction. Since many of the developers of Spry are on the Dreamweaver team I expect it to be included in Dreamweaver at some point. I also expect to see many more UI components and hopefully a component standard so that the community can create its own custom Spry components. This is just the beginning of a very interesting technology with a lot of potential. Hopefully we'll see it fulfill that potential soon.

More Stories By Kelly Brown

Kelly Brown is the CTO of About Web (www.aboutweb.com), an Internet solutions provider in the Washington, DC, area. He has a BS and MS in computer science and is a Microsoft-certified systems engineer.

Comments (2) View Comments

Share your thoughts on this story.

Add your comment
You must be signed in to add a comment. Sign-in | Register

In accordance with our Comment Policy, we encourage comments that are on topic, relevant and to-the-point. We will remove comments that include profanity, personal attacks, racial slurs, threats of violence, or other inappropriate material that violates our Terms and Conditions, and will block users who make repeated violations. We ask all readers to expect diversity of opinion and to treat one another with dignity and respect.


Most Recent Comments
Dimitris Siskopoulos 08/09/06 03:24:38 AM EDT

In the same period, you have a review for flex and an introduction to Spry, and i was worried, WHY Adobe created a second product (Spry) when it already has Flex? Coldfusion developer are not comfortable with Flex and i only know very few working with it, and adobe produces a new same product? How clever is that?

Aaron Leventhal 08/05/06 01:45:14 PM EDT

Thanks for mentioning accessibility for users with disabilities.

Are you aware of the dynamic content accessibility technology available in Firefox? Will Spry use those?

http://developer.mozilla.org/en/docs/Accessible_DHTML

@ThingsExpo Stories
DX World EXPO, LLC, a Lighthouse Point, Florida-based startup trade show producer and the creator of "DXWorldEXPO® - Digital Transformation Conference & Expo" has announced its executive management team. The team is headed by Levent Selamoglu, who has been named CEO. "Now is the time for a truly global DX event, to bring together the leading minds from the technology world in a conversation about Digital Transformation," he said in making the announcement.
"Space Monkey by Vivent Smart Home is a product that is a distributed cloud-based edge storage network. Vivent Smart Home, our parent company, is a smart home provider that places a lot of hard drives across homes in North America," explained JT Olds, Director of Engineering, and Brandon Crowfeather, Product Manager, at Vivint Smart Home, in this SYS-CON.tv interview at @ThingsExpo, held Oct 31 – Nov 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA.
SYS-CON Events announced today that Conference Guru has been named “Media Sponsor” of the 22nd International Cloud Expo, which will take place on June 5-7, 2018, at the Javits Center in New York, NY. A valuable conference experience generates new contacts, sales leads, potential strategic partners and potential investors; helps gather competitive intelligence and even provides inspiration for new products and services. Conference Guru works with conference organizers to pass great deals to gre...
The Internet of Things will challenge the status quo of how IT and development organizations operate. Or will it? Certainly the fog layer of IoT requires special insights about data ontology, security and transactional integrity. But the developmental challenges are the same: People, Process and Platform. In his session at @ThingsExpo, Craig Sproule, CEO of Metavine, demonstrated how to move beyond today's coding paradigm and shared the must-have mindsets for removing complexity from the develop...
In his Opening Keynote at 21st Cloud Expo, John Considine, General Manager of IBM Cloud Infrastructure, led attendees through the exciting evolution of the cloud. He looked at this major disruption from the perspective of technology, business models, and what this means for enterprises of all sizes. John Considine is General Manager of Cloud Infrastructure Services at IBM. In that role he is responsible for leading IBM’s public cloud infrastructure including strategy, development, and offering m...
"Evatronix provides design services to companies that need to integrate the IoT technology in their products but they don't necessarily have the expertise, knowledge and design team to do so," explained Adam Morawiec, VP of Business Development at Evatronix, in this SYS-CON.tv interview at @ThingsExpo, held Oct 31 – Nov 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA.
To get the most out of their data, successful companies are not focusing on queries and data lakes, they are actively integrating analytics into their operations with a data-first application development approach. Real-time adjustments to improve revenues, reduce costs, or mitigate risk rely on applications that minimize latency on a variety of data sources. In his session at @BigDataExpo, Jack Norris, Senior Vice President, Data and Applications at MapR Technologies, reviewed best practices to ...
Widespread fragmentation is stalling the growth of the IIoT and making it difficult for partners to work together. The number of software platforms, apps, hardware and connectivity standards is creating paralysis among businesses that are afraid of being locked into a solution. EdgeX Foundry is unifying the community around a common IoT edge framework and an ecosystem of interoperable components.
Large industrial manufacturing organizations are adopting the agile principles of cloud software companies. The industrial manufacturing development process has not scaled over time. Now that design CAD teams are geographically distributed, centralizing their work is key. With large multi-gigabyte projects, outdated tools have stifled industrial team agility, time-to-market milestones, and impacted P&L stakeholders.
"Akvelon is a software development company and we also provide consultancy services to folks who are looking to scale or accelerate their engineering roadmaps," explained Jeremiah Mothersell, Marketing Manager at Akvelon, in this SYS-CON.tv interview at 21st Cloud Expo, held Oct 31 – Nov 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA.
"IBM is really all in on blockchain. We take a look at sort of the history of blockchain ledger technologies. It started out with bitcoin, Ethereum, and IBM evaluated these particular blockchain technologies and found they were anonymous and permissionless and that many companies were looking for permissioned blockchain," stated René Bostic, Technical VP of the IBM Cloud Unit in North America, in this SYS-CON.tv interview at 21st Cloud Expo, held Oct 31 – Nov 2, 2017, at the Santa Clara Conventi...
In his session at 21st Cloud Expo, Carl J. Levine, Senior Technical Evangelist for NS1, will objectively discuss how DNS is used to solve Digital Transformation challenges in large SaaS applications, CDNs, AdTech platforms, and other demanding use cases. Carl J. Levine is the Senior Technical Evangelist for NS1. A veteran of the Internet Infrastructure space, he has over a decade of experience with startups, networking protocols and Internet infrastructure, combined with the unique ability to it...
22nd International Cloud Expo, taking place June 5-7, 2018, at the Javits Center in New York City, NY, and co-located with the 1st DXWorld Expo will feature technical sessions from a rock star conference faculty and the leading industry players in the world. Cloud computing is now being embraced by a majority of enterprises of all sizes. Yesterday's debate about public vs. private has transformed into the reality of hybrid cloud: a recent survey shows that 74% of enterprises have a hybrid cloud ...
"Cloud Academy is an enterprise training platform for the cloud, specifically public clouds. We offer guided learning experiences on AWS, Azure, Google Cloud and all the surrounding methodologies and technologies that you need to know and your teams need to know in order to leverage the full benefits of the cloud," explained Alex Brower, VP of Marketing at Cloud Academy, in this SYS-CON.tv interview at 21st Cloud Expo, held Oct 31 – Nov 2, 2017, at the Santa Clara Convention Center in Santa Clar...
Gemini is Yahoo’s native and search advertising platform. To ensure the quality of a complex distributed system that spans multiple products and components and across various desktop websites and mobile app and web experiences – both Yahoo owned and operated and third-party syndication (supply), with complex interaction with more than a billion users and numerous advertisers globally (demand) – it becomes imperative to automate a set of end-to-end tests 24x7 to detect bugs and regression. In th...
"MobiDev is a software development company and we do complex, custom software development for everybody from entrepreneurs to large enterprises," explained Alan Winters, U.S. Head of Business Development at MobiDev, in this SYS-CON.tv interview at 21st Cloud Expo, held Oct 31 – Nov 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA.
Coca-Cola’s Google powered digital signage system lays the groundwork for a more valuable connection between Coke and its customers. Digital signs pair software with high-resolution displays so that a message can be changed instantly based on what the operator wants to communicate or sell. In their Day 3 Keynote at 21st Cloud Expo, Greg Chambers, Global Group Director, Digital Innovation, Coca-Cola, and Vidya Nagarajan, a Senior Product Manager at Google, discussed how from store operations and ...
"There's plenty of bandwidth out there but it's never in the right place. So what Cedexis does is uses data to work out the best pathways to get data from the origin to the person who wants to get it," explained Simon Jones, Evangelist and Head of Marketing at Cedexis, in this SYS-CON.tv interview at 21st Cloud Expo, held Oct 31 – Nov 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA.
SYS-CON Events announced today that CrowdReviews.com has been named “Media Sponsor” of SYS-CON's 22nd International Cloud Expo, which will take place on June 5–7, 2018, at the Javits Center in New York City, NY. CrowdReviews.com is a transparent online platform for determining which products and services are the best based on the opinion of the crowd. The crowd consists of Internet users that have experienced products and services first-hand and have an interest in letting other potential buye...
SYS-CON Events announced today that Telecom Reseller has been named “Media Sponsor” of SYS-CON's 22nd International Cloud Expo, which will take place on June 5-7, 2018, at the Javits Center in New York, NY. Telecom Reseller reports on Unified Communications, UCaaS, BPaaS for enterprise and SMBs. They report extensively on both customer premises based solutions such as IP-PBX as well as cloud based and hosted platforms.