The example for the Getting Started guide. It shows:
- How to handle a custom event in the Event Map
- How to use the view Injectors to get the data from the Model Manager
RemoteObject version
This is the version described in the Getting Started guide. It uses RemoteObject to call a ColdFusion service. The backend could be changed to other AMF implementation such as Java as long as the service returns a numeric value.
WebService version
We have also created a version of this example that does not require ColdFusion. It calls the Stock Quotes web service directly. Because of that, it also has an additional class that parses the data before passing it to the QuoteManager class that stores it. In order to that, we added a MethodInvoker tag between the <resultHandlers> tag and the MethodInvoker tag that called the QuoteManager.
Sorry about that. I've updated the zip, I hope it works now.
By the way, were you the person that came to me before the session?
This is very interesting stuff, much easier to follow than cairngorm so far... But I do have one simple question?
I'm unsure of how the program flow works withinthe result handlers.
Does each MethodInvoker get called in sequence? And how the result of QuoteSericeParser is passed along to QuoteManager. I can see hints in the code such as lastReturn.lastPrice, but I'd just like a bit of clarification on this point if possible?
Many thanks,
Matt Law
<resultHandlers>
<!-- parse the results -->
<MethodInvoker generator="{QuoteServiceParser}" method="parseQuoteResults"
arguments="{resultObject}" cache="false" />
<!-- store the last price from the parsed results -->
<MethodInvoker generator="{QuoteManager}"
method="storeQuote" arguments="{lastReturn.lastPrice}"/>
</resultHandlers>
That's right, all tags inside the handlers are executed in order unless they are nested inside the result of an asynchronous call (resultHandlers or faultHandlers for example). And yes, the result is sent to the storeQuote function by using lastReturn.
See Using lastReturn for more information. Also see EventHandlers, the last section called "Order of the inner tags is important".
private var _price:Number = 0;
public function set price(value:Number):void {
_price = value;
}
public function get price():Number {
return _price;
}
So this requires no change in the MainEventMap
<PropertyInjector targetKey="price" source="{QuoteManager}" sourceKey="price" />
remains as is but should not access the getter, right?
Public properties and public getter/setter are basically interchangeable, so yes, the PropertyInjector can stay the same and the setter will be called instead.
Just like:
<EventMap>
<EventHandlers type="">
<RemoteObjectInvoker method="loadUsers">
<resultHandlers>
<XXXTag target="currentView" targetKey="users" source="{resultObject}" />
</resultHandlers>
</RemoteObjectInvoker>
</EventMap>
Which tag can do this in this case?
Like this:
<EventMap>
<EventHandlers type="">
<RemoteObjectInvoker method="loadUsers">
<resultHandlers>
<DataCopier destination="{event.target}" destinationKey="varInView" source="result" />
</resultHandlers>
</RemoteObjectInvoker>
</EventMap>
Apart from that mate seems to be a nice lightweight framework to me :) Go on...
index.html is just the Flex Builder generated wrapper, nothing special there, and not really part of the source.
For example if I have the following in the main application
<maps:MainEventMap />
<views:QuotePanel />
<views:QuotePanel />
The quote will be sent to both panels.
Thanks.
In situations that instances of QuotePanel are created in runtime, targetId won't work, since the ids would be dynamic.
See the Hello World example to do what you need (using the CallBack tag and without using targetId).