{"id":17,"date":"2008-06-20T18:24:41","date_gmt":"2008-06-21T01:24:41","guid":{"rendered":"http:\/\/www.nayansavla.com\/blog\/?p=17"},"modified":"2008-08-01T00:33:24","modified_gmt":"2008-08-01T07:33:24","slug":"connecting-cairngorm-view-with-the-command-class","status":"publish","type":"post","link":"https:\/\/www.nayansavla.com\/blog\/?p=17","title":{"rendered":"Connecting Cairngorm View with the Command Class."},"content":{"rendered":"<p>I have been playing with <a href=\"http:\/\/www.wikipedia.org\/search-redirect.php?language=en&go=Go&search=Cairngorm\">Cairngorm<\/a> quite a bit and usually when i dispatch cairngorm event, i rely on flex data binding with the model class to manage the view. This is applicable in most of the cases but then sometimes its not required to bind some data in your view with the model.\u00a0<\/p>\n<p>I came up with this solution to convert my view to a responder and then once data is fetched, I can update my view as required. Its really an easy solution, your view container has to implement mx.rpc.IResponder Interface and then in the cairngorm event you just pass its reference. It looks as follows,<\/p>\n<p><span>&lt;mx:Canvas<\/span> xmlns:mx=&#8221;<span>http:\/\/www.adobe.com\/2006\/mxml<\/span>&#8221; width=&#8221;<span>343<\/span>&#8221; height=&#8221;<span>389<\/span>&#8221; show=&#8221;initModule()&#8221; implements=&#8221;<span>mx.rpc.IResponder<\/span>&#8220;<span>&gt;<\/span><\/p>\n<p>there are only two methods in this interface, result and fault, this is how my script block looks inside this Canvas.<\/p>\n<div class=\"codecolorer-container actionscript default\" style=\"overflow:auto;white-space:nowrap;width:435px;height:300px;\"><div class=\"actionscript codecolorer\"><span class=\"kw3\">import<\/span> com.<span class=\"me1\">adobe<\/span>.<span class=\"me1\">cairngorm<\/span>.<span class=\"kw3\">control<\/span>.<span class=\"me1\">CairngormEventDispatcher<\/span>;<br \/>\n<span class=\"kw3\">import<\/span> com.<span class=\"me1\">sampleapp<\/span>.<span class=\"me1\">events<\/span>.<span class=\"me1\">GetStoreItemsEvent<\/span>;<br \/>\n<span class=\"kw3\">import<\/span> com.<span class=\"me1\">sampleapp<\/span>.<span class=\"me1\">model<\/span>.<span class=\"me1\">SampleAppModel<\/span>;<br \/>\n<span class=\"kw3\">import<\/span> mx.<span class=\"me1\">controls<\/span>.<span class=\"me1\">Alert<\/span>;<br \/>\n<br \/>\n<span class=\"kw3\">private<\/span> <span class=\"kw2\">var<\/span> model:SampleAppModel;<br \/>\n<br \/>\n<span class=\"kw3\">public<\/span> <span class=\"kw2\">function<\/span> fault<span class=\"br0\">&#40;<\/span><span class=\"kw3\">data<\/span>:<span class=\"kw3\">Object<\/span><span class=\"br0\">&#41;<\/span>:<span class=\"kw3\">void<\/span><span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"kw3\">private<\/span> <span class=\"kw2\">function<\/span> initModule<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>:<span class=\"kw3\">void<\/span><span class=\"br0\">&#123;<\/span><br \/>\n\u00a0\u00a0 \u00a0<span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"sy0\">!<\/span>SampleAppModel.<span class=\"me1\">getInstance<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">albumDataList<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0model = SampleAppModel.<span class=\"me1\">getInstance<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0<span class=\"kw2\">var<\/span> event:GetStoreItemsEvent = <span class=\"kw2\">new<\/span> GetStoreItemsEvent<span class=\"br0\">&#40;<\/span>GetStoreItemsEvent.<span class=\"me1\">GET_STOREITEM<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0event.<span class=\"kw3\">data<\/span> = <span class=\"kw2\">new<\/span> <span class=\"kw3\">Object<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0event.<span class=\"kw3\">data<\/span>.<span class=\"me1\">responderObj<\/span> = <span class=\"kw3\">this<\/span>;<br \/>\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0CairngormEventDispatcher.<span class=\"me1\">getInstance<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">dispatchEvent<\/span><span class=\"br0\">&#40;<\/span>event<span class=\"br0\">&#41;<\/span>;<br \/>\n\u00a0\u00a0 \u00a0<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n<span class=\"kw3\">public<\/span> <span class=\"kw2\">function<\/span> result<span class=\"br0\">&#40;<\/span><span class=\"kw3\">data<\/span>:<span class=\"kw3\">Object<\/span><span class=\"br0\">&#41;<\/span>:<span class=\"kw3\">void<\/span><span class=\"br0\">&#123;<\/span><br \/>\n\u00a0\u00a0 \u00a0<span class=\"kw2\">var<\/span> resultXML:XMLList = <span class=\"kw3\">data<\/span>.<span class=\"me1\">result<\/span><span class=\"br0\">&#91;<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">&#93;<\/span>.<span class=\"me1\">children<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">children<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n\u00a0\u00a0 \u00a0<span class=\"kw2\">var<\/span> finalXML:<span class=\"kw3\">XML<\/span> = <span class=\"kw2\">new<\/span> <span class=\"kw3\">XML<\/span><span class=\"br0\">&#40;<\/span>resultXML<span class=\"br0\">&#91;<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">&#93;<\/span>.<span class=\"kw3\">toString<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n\u00a0\u00a0 \u00a0model.<span class=\"me1\">albumDataList<\/span> = finalXML.<span class=\"me1\">children<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/div>\n<p>and this is how the execute block inside my command class looks like,<\/p>\n<div class=\"codecolorer-container actionscript default\" style=\"overflow:auto;white-space:nowrap;width:435px;\"><div class=\"actionscript codecolorer\"><span class=\"kw3\">public<\/span> <span class=\"kw2\">function<\/span> execute<span class=\"br0\">&#40;<\/span>event:CairngormEvent<span class=\"br0\">&#41;<\/span>:<span class=\"kw3\">void<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n\u00a0\u00a0 \u00a0<span class=\"kw2\">var<\/span> service:WebService;<br \/>\n\u00a0\u00a0 \u00a0<span class=\"kw2\">var<\/span> operation:Operation;<br \/>\n\u00a0\u00a0 \u00a0<span class=\"kw2\">var<\/span> token:AsyncToken;<br \/>\n\u00a0\u00a0 \u00a0<span class=\"kw2\">var<\/span> requestObj:<span class=\"kw3\">Object<\/span>;<br \/>\n\u00a0\u00a0 \u00a0itemType = event.<span class=\"kw3\">data<\/span>.<span class=\"me1\">itemType<\/span>;<br \/>\n<br \/>\n\u00a0\u00a0 \u00a0service = ServiceLocator.<span class=\"me1\">getInstance<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">getWebService<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;storeService&quot;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n<br \/>\n\u00a0\u00a0 \u00a0service.<span class=\"me1\">loadWSDL<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n<br \/>\n\u00a0\u00a0 \u00a0operation = service.<span class=\"me1\">getOperation<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;GetItemsFromStore&quot;<\/span><span class=\"br0\">&#41;<\/span> as Operation;<br \/>\n\u00a0\u00a0 \u00a0operation.<span class=\"me1\">resultFormat<\/span> = <span class=\"st0\">&quot;e4x&quot;<\/span>;<br \/>\n\u00a0\u00a0 \u00a0requestObj = <span class=\"kw2\">new<\/span> <span class=\"kw3\">Object<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n\u00a0\u00a0 \u00a0requestObj.<span class=\"me1\">itemType<\/span> = itemType;<br \/>\n\u00a0\u00a0 \u00a0operation.<span class=\"me1\">request<\/span> = requestObj;<br \/>\n\u00a0\u00a0 \u00a0token = operation.<span class=\"kw3\">send<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> as AsyncToken;<br \/>\n\u00a0\u00a0 \u00a0<span class=\"co1\">\/\/this is the line where the responder object is passed to the Asynctoken<\/span><br \/>\n\u00a0\u00a0 \u00a0token.<span class=\"me1\">addResponder<\/span><span class=\"br0\">&#40;<\/span>event.<span class=\"kw3\">data<\/span>.<span class=\"me1\">responderObj<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n<br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/div>\n<p>so using the above method, We make sure that the result function inside the canvas will be called when the data is received. Now you can do whatever you need to inside this function.<\/p>\n<p>Questions, Comments, Suggestions always welcome.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I have been playing with Cairngorm quite a bit and usually when i dispatch cairngorm event, i rely on flex data binding with the model class to manage the view. This is applicable in most of the cases but then sometimes its not required to bind some data in your view with the model.\u00a0 I [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,7],"tags":[22,21,66,23,24],"class_list":["post-17","post","type-post","status-publish","format-standard","hentry","category-as-30","category-flex","tag-actionscript-30","tag-cairngorm","tag-flex","tag-webservice","tag-wsdl"],"_links":{"self":[{"href":"https:\/\/www.nayansavla.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/17","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.nayansavla.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.nayansavla.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.nayansavla.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.nayansavla.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=17"}],"version-history":[{"count":0,"href":"https:\/\/www.nayansavla.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/17\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.nayansavla.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=17"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.nayansavla.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=17"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.nayansavla.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=17"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}