Online Book Reader

Home Category

AJAX In Action [77]

By Root 3872 0
’s unique ID, ensuring that we have only one reference to each garment type at a time. In the constructor function, we set all the simple properties, that is, those that aren’t arrays. We define the arrays as empty and provide simple adder methods, which uses our enhanced array code (see appendix B) to prevent duplicates. We don’t provide getter or setter methods by default and don’t support the full access control—private, protected, and public variables and methods—that a full OO language does. There are ways of providing this feature, which are discussed in appendix B, but my own preference is to keep the Model simple.

When parsing the XML stream, it would be nice to initially build an empty Garment object and then populate it field by field. The astute reader may be wondering why we haven’t provided a simpler constructor. In fact, we have. JavaScript function arguments are mutable, and any missing values from a call to a function will simply initialize that value to null. So the call

var garment=new Garment(123);

will be treated as identical to

var garment=new Garment(123,null,null,null);

We need to pass in the ID, because we use that in the constructor to place the new object in the global list of garments.

4.4.2 Interacting with the server

We could parse the XML feed of the type shown in listing 4.10 in order to generate Garment objects in the client application. We’ve already seen this in action in chapter 2, and we’ll see a number of variations in chapter 5, so we won’t go into all the details here. The XML document contains a mixture of attributes and tag content. We read attribute data using the attributes property and getNamedItem() function and read the body text of tags using the firstChild and data properties, for example:

garment.description=descrTag.firstChild.data;

to parse an XML fragment such as

Large tweedy hat looking

like an unappealing strawberry

Licensed to jonathan zheng

146

CHAPTER 4

The page as an application

Note that garments are automatically added to our array of all garments as they are created, simply by invoking the constructor. Removing a garment from the array is also relatively straightforward:

function unregisterGarment(id){

garments[id]=null;

}

This removes the garment type from the global registry, but won’t cascade to destroy any instances of Garment that we have already created. We can add a simple validation test to the Garment object, however: Garment.prototype.isValid=function(){

return garments[this.id]!=null;

}

We’ve now defined a clear path for propagating data all the way from the database to the client, with nice, easy-to-handle objects at each step. Let’s recap the steps. First, we generate a server-side object model from the database. In section 3.4.2, we saw how to do this using an Object-Relational Mapping (ORM) tool, which gave us out-of-the-box two-way interactions between object model and database. We can read data into objects, modify it, and save the data. Second, we used a template system to generate an XML stream from our object model, and third, we parsed this stream in order to create an object model on the JavaScript tier. We must do this parsing by hand for now. We may see ORM-like mapping libraries appearing in the near future.

In an administrative application, of course, we might want to edit our data too, that is, modify the JavaScript model, and then communicate these changes back to the server model. This forces us to confront the issue that we now have two copies of our domain model and that they may get out of sync with each other. In a classic web application, all the intelligence is located on the server, so our model is located there, in whatever language we’re using. In an Ajax application, we want to distribute the intelligence between the client and the server, so that the client code can make some decisions for itself before calling back to the server. If the client makes only very simple decisions, we can code these in an ad hoc way, but then we won’t get much of the benefit

Return Main Page Previous Page Next Page

®Online Book Reader