
|
[flex_india:26332] Singleton Pattern Questions
Hi , I am calling httpservice.send() method and getting the data and populating it in XMLList . I want this step to be done only once and want to reuse the data what ever I got . My scenario is like this
1)Creating Custom combobox component 2) Calling send() in the custom component and populating the combobox I want to create around 5 instances of the above component . But what is happening is the send() is getting called again and again . Is there any way to restrict this and get the data only once and use it for my 5 instances . The problem here is If I use http send() method when I load the application , This works perfect . But we want that to be called only from component and want to use the same component again and again.
Thanks for your help Kiran
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Flex India Community" group. To post to this group, send email to flex_india@... To unsubscribe from this group, send email to flex_india+unsubscribe@... For more options, visit this group at http://groups.google.com/group/flex_india?hl=en
-~----------~----~----~----~------~----~------~--~---
|

|
[flex_india:26334] Re: Singleton Pattern Questions
I think you should plan the application better, if instantiation of the component is hitting the service and you are intended to use it again and again, then its better to hit the service on the creation complete of its container.
Considering, you cannot do so because of the constraints, then you have to add a custom property to your custom component, eg var shouldHitHTTP:Boolean check this before hitting the service. Keep it true only for one instance and false for rest of them.
Result you can hold in the singleton object and can bind it to all your custom components. On Tue, Nov 3, 2009 at 3:59 PM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Hi ,
I am calling httpservice.send() method and getting the data and populating it in XMLList . I want this step to be done only once and want to reuse the data what ever I got .
My scenario is like this
1)Creating Custom combobox component 2) Calling send() in the custom component and populating the combobox
I want to create around 5 instances of the above component . But what is happening is the send() is getting called again and again . Is there any way to restrict this and get the data only once and use it for my 5 instances . The problem here is If I use http send() method when I load the application , This works perfect . But we want that to be called only from component and want to use the same component again and again.
Thanks for your help Kiran
-- Thanks, Vaibhav Seth.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Flex India Community" group. To post to this group, send email to flex_india@... To unsubscribe from this group, send email to flex_india+unsubscribe@... For more options, visit this group at http://groups.google.com/group/flex_india?hl=en
-~----------~----~----~----~------~----~------~--~---
|

|
[flex_india:26340] Re: Singleton Pattern Questions
Hi Kiran.
I think you should create a "ModelLocator" singleton class, that gets and store the xml information. It would be something like this:
public class MyModelLocator
{ private static var _instance: MyModelLocator;
private var _data:XMLList;
public function MyModelLocator() { if (_instance != null) trace("Constructor shouldn't be called directly... now I'll have to kill you")
_instance = this;
this.initData(); }
private function initData():void {
//Load data....
}
private function onDataLoaded() {
//Store data
this._data = [loaded data];
}
public static function getInstance():MyModelLocator{ if (! _instance) _instance = new MyModelLocator(); return _instance; }
public function get data():XMLList {
return this._data;
}
}
In order to get data in each combobox, you would set dataprovider="{MyModelLocator.getInstance.data}" (if that XMLList already has the correct structure to be directly used as a dataprovider in the combobox... otherwise now is the time to change it ;) )
This way:
- There's only one instance of MyModelLocator at anytime, anywhere.
- initData is called only once, so the data is retrieved only once.
- By storing the data within the singleton class, it's available to the whole application by just importing the class.
Hope it solves your issue.
Best regards
Andrea.
On Tue, Nov 3, 2009 at 5:59 PM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Hi ,
I am calling httpservice.send() method and getting the data and populating it in XMLList . I want this step to be done only once and want to reuse the data what ever I got .
My scenario is like this
1)Creating Custom combobox component 2) Calling send() in the custom component and populating the combobox
I want to create around 5 instances of the above component . But what is happening is the send() is getting called again and again . Is there any way to restrict this and get the data only once and use it for my 5 instances . The problem here is If I use http send() method when I load the application , This works perfect . But we want that to be called only from component and want to use the same component again and again.
Thanks for your help Kiran
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Flex India Community" group. To post to this group, send email to flex_india@... To unsubscribe from this group, send email to flex_india+unsubscribe@... For more options, visit this group at http://groups.google.com/group/flex_india?hl=en
-~----------~----~----~----~------~----~------~--~---
|

|
[flex_india:26390] Re: Singleton Pattern Questions
Thanks Vaibhav and Andrea for your suggestions. Andrea : You suggestion looks working , But got in one more problem . Could you please help me ? If I call SingletonXML.getInstance().data; It is returning Null because the of getResult() is returning the data later . Since the calls are asynchronous get Data() is getting called first and then getResult().
I checked the event data and data is there in the event . I came into this problem because of "<XML source = "is crashing my IE7, Otherwise I could have done it using XML tag instead HTTPService ( for local data I am using HTTPService ) . Please see the code below.
package Components { import mx.controls.Alert; import mx.rpc.events.ResultEvent; import mx.rpc.http.HTTPService; public class SingletonXML { private static var _instance: SingletonXML;
private var _data:XMLList; public function SingletonXML() { if (_instance != null) trace("Constructor shouldn't be called directly... now I'll have to kill you")
_instance = this; this.initData(); } private function initData():void { var service:HTTPService =new HTTPService();
service.url="Components/StudentData.xml"; service.resultFormat="e4x"; service.addEventListener("result", getResult); service.send();
} private function onDataLoaded():void { //Store data //this._data = [loaded data]; }
private function getResult(event:ResultEvent):void{ Alert.show("this is in get result"); _data=XMLList(event.result.Country); }
public static function getInstance():SingletonXML{ if (! _instance) _instance = new SingletonXML(); return _instance;
} public function get data():XMLList { Alert.show("this is in get data"); return this._data; }
} } On Tue, Nov 3, 2009 at 4:38 PM, Andrea Giorgetta <andreagiorgetta@...> wrote:
Hi Kiran.
I think you should create a "ModelLocator" singleton class, that gets and store the xml information. It would be something like this:
public class MyModelLocator
{ private static var _instance: MyModelLocator;
private var _data:XMLList;
public function MyModelLocator() { if (_instance != null) trace("Constructor shouldn't be called directly... now I'll have to kill you")
_instance = this;
this.initData(); }
private function initData():void {
//Load data....
}
private function onDataLoaded() {
//Store data
this._data = [loaded data];
}
public static function getInstance():MyModelLocator{ if (! _instance) _instance = new MyModelLocator(); return _instance; }
public function get data():XMLList {
return this._data;
}
}
In order to get data in each combobox, you would set dataprovider="{MyModelLocator.getInstance.data}" (if that XMLList already has the correct structure to be directly used as a dataprovider in the combobox... otherwise now is the time to change it ;) )
This way:
- There's only one instance of MyModelLocator at anytime, anywhere.
- initData is called only once, so the data is retrieved only once.
- By storing the data within the singleton class, it's available to the whole application by just importing the class.
Hope it solves your issue.
Best regards
Andrea.
On Tue, Nov 3, 2009 at 5:59 PM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Hi ,
I am calling httpservice.send() method and getting the data and populating it in XMLList . I want this step to be done only once and want to reuse the data what ever I got .
My scenario is like this
1)Creating Custom combobox component 2) Calling send() in the custom component and populating the combobox
I want to create around 5 instances of the above component . But what is happening is the send() is getting called again and again . Is there any way to restrict this and get the data only once and use it for my 5 instances . The problem here is If I use http send() method when I load the application , This works perfect . But we want that to be called only from component and want to use the same component again and again.
Thanks for your help Kiran
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Flex India Community" group. To post to this group, send email to flex_india@... To unsubscribe from this group, send email to flex_india+unsubscribe@... For more options, visit this group at http://groups.google.com/group/flex_india?hl=en
-~----------~----~----~----~------~----~------~--~---
|

|
[flex_india:26392] Re: Singleton Pattern Questions
To avoid such kind of issues, better use Cairngorm. I doubt the problem is Binding. You have to bind data with the dataprovider of your component. So that, whenever your data will get populated it will be reflected in the component. Try using:
[Bindable]private var _data:XMLList; On Wed, Nov 4, 2009 at 11:59 AM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Thanks Vaibhav and Andrea for your suggestions.
Andrea : You suggestion looks working , But got in one more problem . Could you please help me ?
If I call SingletonXML.getInstance().data; It is returning Null because the of getResult() is returning the data later . Since the calls are asynchronous get Data() is getting called first and then getResult().
I checked the event data and data is there in the event .
I came into this problem because of "<XML source = "is crashing my IE7, Otherwise I could have done it using XML tag instead HTTPService ( for local data I am using HTTPService ) . Please see the code below.
package Components { import mx.controls.Alert; import mx.rpc.events.ResultEvent; import mx.rpc.http.HTTPService;
public class SingletonXML { private static var _instance: SingletonXML;
private var _data:XMLList; public function SingletonXML() { if (_instance != null) trace("Constructor shouldn't be called directly... now I'll have to kill you")
_instance = this; this.initData(); } private function initData():void {
var service:HTTPService =new HTTPService();
service.url="Components/StudentData.xml"; service.resultFormat="e4x"; service.addEventListener("result", getResult); service.send();
} private function onDataLoaded():void { //Store data //this._data = [loaded data];
}
private function getResult(event:ResultEvent):void{ Alert.show("this is in get result");
_data=XMLList(event.result.Country);
}
public static function getInstance():SingletonXML{ if (! _instance) _instance = new SingletonXML(); return _instance;
} public function get data():XMLList {
Alert.show("this is in get data"); return this._data;
}
} } On Tue, Nov 3, 2009 at 4:38 PM, Andrea Giorgetta <andreagiorgetta@...> wrote:
Hi Kiran.
I think you should create a "ModelLocator" singleton class, that gets and store the xml information. It would be something like this:
public class MyModelLocator
{ private static var _instance: MyModelLocator;
private var _data:XMLList;
public function MyModelLocator() { if (_instance != null) trace("Constructor shouldn't be called directly... now I'll have to kill you")
_instance = this;
this.initData(); }
private function initData():void {
//Load data....
}
private function onDataLoaded() {
//Store data
this._data = [loaded data];
}
public static function getInstance():MyModelLocator{ if (! _instance) _instance = new MyModelLocator(); return _instance; }
public function get data():XMLList {
return this._data;
}
}
In order to get data in each combobox, you would set dataprovider="{MyModelLocator.getInstance.data}" (if that XMLList already has the correct structure to be directly used as a dataprovider in the combobox... otherwise now is the time to change it ;) )
This way:
- There's only one instance of MyModelLocator at anytime, anywhere.
- initData is called only once, so the data is retrieved only once.
- By storing the data within the singleton class, it's available to the whole application by just importing the class.
Hope it solves your issue.
Best regards
Andrea.
On Tue, Nov 3, 2009 at 5:59 PM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Hi ,
I am calling httpservice.send() method and getting the data and populating it in XMLList . I want this step to be done only once and want to reuse the data what ever I got .
My scenario is like this
1)Creating Custom combobox component 2) Calling send() in the custom component and populating the combobox
I want to create around 5 instances of the above component . But what is happening is the send() is getting called again and again . Is there any way to restrict this and get the data only once and use it for my 5 instances . The problem here is If I use http send() method when I load the application , This works perfect . But we want that to be called only from component and want to use the same component again and again.
Thanks for your help Kiran
-- Thanks, Vaibhav Seth.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Flex India Community" group. To post to this group, send email to flex_india@... To unsubscribe from this group, send email to flex_india+unsubscribe@... For more options, visit this group at http://groups.google.com/group/flex_india?hl=en
-~----------~----~----~----~------~----~------~--~---
|

|
[flex_india:26394] Re: Singleton Pattern Questions
Hi Vaibhav, Sorry no use ,still not working . Regards Kiran On Wed, Nov 4, 2009 at 12:38 PM, Vaibhav Seth <seth.vaibhav.08@...> wrote:
To avoid such kind of issues, better use Cairngorm. I doubt the problem is Binding. You have to bind data with the dataprovider of your component. So that, whenever your data will get populated it will be reflected in the component. Try using:
[Bindable]private var _data:XMLList;On Wed, Nov 4, 2009 at 11:59 AM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Thanks Vaibhav and Andrea for your suggestions.
Andrea : You suggestion looks working , But got in one more problem . Could you please help me ?
If I call SingletonXML.getInstance().data; It is returning Null because the of getResult() is returning the data later . Since the calls are asynchronous get Data() is getting called first and then getResult().
I checked the event data and data is there in the event .
I came into this problem because of "<XML source = "is crashing my IE7, Otherwise I could have done it using XML tag instead HTTPService ( for local data I am using HTTPService ) . Please see the code below.
package Components { import mx.controls.Alert; import mx.rpc.events.ResultEvent; import mx.rpc.http.HTTPService;
public class SingletonXML { private static var _instance: SingletonXML;
private var _data:XMLList; public function SingletonXML() { if (_instance != null) trace("Constructor shouldn't be called directly... now I'll have to kill you")
_instance = this; this.initData(); } private function initData():void {
var service:HTTPService =new HTTPService();
service.url="Components/StudentData.xml"; service.resultFormat="e4x"; service.addEventListener("result", getResult); service.send();
} private function onDataLoaded():void { //Store data //this._data = [loaded data];
}
private function getResult(event:ResultEvent):void{ Alert.show("this is in get result");
_data=XMLList(event.result.Country);
}
public static function getInstance():SingletonXML{ if (! _instance) _instance = new SingletonXML(); return _instance;
} public function get data():XMLList {
Alert.show("this is in get data"); return this._data;
}
} } On Tue, Nov 3, 2009 at 4:38 PM, Andrea Giorgetta <andreagiorgetta@...> wrote:
Hi Kiran.
I think you should create a "ModelLocator" singleton class, that gets and store the xml information. It would be something like this:
public class MyModelLocator
{ private static var _instance: MyModelLocator;
private var _data:XMLList;
public function MyModelLocator() { if (_instance != null) trace("Constructor shouldn't be called directly... now I'll have to kill you")
_instance = this;
this.initData(); }
private function initData():void {
//Load data....
}
private function onDataLoaded() {
//Store data
this._data = [loaded data];
}
public static function getInstance():MyModelLocator{ if (! _instance) _instance = new MyModelLocator(); return _instance; }
public function get data():XMLList {
return this._data;
}
}
In order to get data in each combobox, you would set dataprovider="{MyModelLocator.getInstance.data}" (if that XMLList already has the correct structure to be directly used as a dataprovider in the combobox... otherwise now is the time to change it ;) )
This way:
- There's only one instance of MyModelLocator at anytime, anywhere.
- initData is called only once, so the data is retrieved only once.
- By storing the data within the singleton class, it's available to the whole application by just importing the class.
Hope it solves your issue.
Best regards
Andrea.
On Tue, Nov 3, 2009 at 5:59 PM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Hi ,
I am calling httpservice.send() method and getting the data and populating it in XMLList . I want this step to be done only once and want to reuse the data what ever I got .
My scenario is like this
1)Creating Custom combobox component 2) Calling send() in the custom component and populating the combobox
I want to create around 5 instances of the above component . But what is happening is the send() is getting called again and again . Is there any way to restrict this and get the data only once and use it for my 5 instances . The problem here is If I use http send() method when I load the application , This works perfect . But we want that to be called only from component and want to use the same component again and again.
Thanks for your help Kiran
-- Thanks, Vaibhav Seth.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Flex India Community" group. To post to this group, send email to flex_india@... To unsubscribe from this group, send email to flex_india+unsubscribe@... For more options, visit this group at http://groups.google.com/group/flex_india?hl=en
-~----------~----~----~----~------~----~------~--~---
|

|
[flex_india:26410] Re: Singleton Pattern Questions
Could you send an example of Components/StudentData.xml?
On Wed, Nov 4, 2009 at 4:38 PM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Hi Vaibhav,
Sorry no use ,still not working .
Regards Kiran
On Wed, Nov 4, 2009 at 12:38 PM, Vaibhav Seth <seth.vaibhav.08@...> wrote:
To avoid such kind of issues, better use Cairngorm. I doubt the problem is Binding. You have to bind data with the dataprovider of your component. So that, whenever your data will get populated it will be reflected in the component. Try using:
[Bindable]private var _data:XMLList;
On Wed, Nov 4, 2009 at 11:59 AM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Thanks Vaibhav and Andrea for your suggestions.
Andrea : You suggestion looks working , But got in one more problem . Could you please help me ?
If I call SingletonXML.getInstance().data; It is returning Null because the of getResult() is returning the data later . Since the calls are asynchronous get Data() is getting called first and then getResult().
I checked the event data and data is there in the event .
I came into this problem because of "<XML source = "is crashing my IE7, Otherwise I could have done it using XML tag instead HTTPService ( for local data I am using HTTPService ) . Please see the code below.
package Components { import mx.controls.Alert; import mx.rpc.events.ResultEvent; import mx.rpc.http.HTTPService;
public class SingletonXML { private static var _instance: SingletonXML;
private var _data:XMLList; public function SingletonXML() {
if (_instance != null) trace("Constructor shouldn't be called directly... now I'll have to kill you") _instance = this;
this.initData(); } private function initData():void {
var service:HTTPService =new HTTPService(); service.url="Components/StudentData.xml";
service.resultFormat="e4x"; service.addEventListener("result", getResult); service.send(); } private function onDataLoaded():void {
//Store data //this._data = [loaded data]; }
private function getResult(event:ResultEvent):void{
Alert.show("this is in get result");
_data=XMLList(event.result.Country);
} public static function getInstance():SingletonXML{
if (! _instance) _instance = new SingletonXML();
return _instance; } public function get data():XMLList {
Alert.show("this is in get data"); return this._data;
} } }
On Tue, Nov 3, 2009 at 4:38 PM, Andrea Giorgetta <andreagiorgetta@...> wrote:
Hi Kiran.
I think you should create a "ModelLocator" singleton class, that gets and store the xml information. It would be something like this:
public class MyModelLocator
{ private static var _instance: MyModelLocator;
private var _data:XMLList;
public function MyModelLocator() { if (_instance != null) trace("Constructor shouldn't be called directly... now I'll have to kill you")
_instance = this;
this.initData(); }
private function initData():void {
//Load data....
}
private function onDataLoaded() {
//Store data
this._data = [loaded data];
}
public static function getInstance():MyModelLocator{ if (! _instance) _instance = new MyModelLocator(); return _instance; }
public function get data():XMLList {
return this._data;
}
}
In order to get data in each combobox, you would set dataprovider="{MyModelLocator.getInstance.data}" (if that XMLList already has the correct structure to be directly used as a dataprovider in the combobox... otherwise now is the time to change it ;) )
This way:
- There's only one instance of MyModelLocator at anytime, anywhere.
- initData is called only once, so the data is retrieved only once.
- By storing the data within the singleton class, it's available to the whole application by just importing the class.
Hope it solves your issue.
Best regards
Andrea.
On Tue, Nov 3, 2009 at 5:59 PM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Hi ,
I am calling httpservice.send() method and getting the data and populating it in XMLList . I want this step to be done only once and want to reuse the data what ever I got . My scenario is like this
1)Creating Custom combobox component 2) Calling send() in the custom component and populating the combobox
I want to create around 5 instances of the above component . But what is happening is the send() is getting called again and again . Is there any way to restrict this and get the data only once and use it for my 5 instances . The problem here is If I use http send() method when I load the application , This works perfect . But we want that to be called only from component and want to use the same component again and again.
Thanks for your help Kiran
-- Thanks, Vaibhav Seth.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Flex India Community" group. To post to this group, send email to flex_india@... To unsubscribe from this group, send email to flex_india+unsubscribe@... For more options, visit this group at http://groups.google.com/group/flex_india?hl=en
-~----------~----~----~----~------~----~------~--~---
|

|
[flex_india:26415] Re: Singleton Pattern Questions
i think Vaibhav solution should work ,but you have to update the model from the command it self. (try to look in to more Cairngorm solutions). only putting [binding] tag wont do the trick :) the second option should be using and responder.(you may need to implement IResponder interface)
where you can create the asynchronous call and wait until the result is passed back to the result function or falut. actually thats how even cairngrom works. let me know if you need any help on that.
thanks dinukx let me know if you need help with responder Dinukx; POC : On Thu, Nov 5, 2009 at 1:08 AM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Hi Vaibhav,
Sorry no use ,still not working .
Regards Kiran
On Wed, Nov 4, 2009 at 12:38 PM, Vaibhav Seth <seth.vaibhav.08@...> wrote:
To avoid such kind of issues, better use Cairngorm. I doubt the problem is Binding. You have to bind data with the dataprovider of your component. So that, whenever your data will get populated it will be reflected in the component. Try using:
[Bindable]private var _data:XMLList;On Wed, Nov 4, 2009 at 11:59 AM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Thanks Vaibhav and Andrea for your suggestions.
Andrea : You suggestion looks working , But got in one more problem . Could you please help me ?
If I call SingletonXML.getInstance().data; It is returning Null because the of getResult() is returning the data later . Since the calls are asynchronous get Data() is getting called first and then getResult().
I checked the event data and data is there in the event .
I came into this problem because of "<XML source = "is crashing my IE7, Otherwise I could have done it using XML tag instead HTTPService ( for local data I am using HTTPService ) . Please see the code below.
package Components { import mx.controls.Alert; import mx.rpc.events.ResultEvent; import mx.rpc.http.HTTPService;
public class SingletonXML { private static var _instance: SingletonXML;
private var _data:XMLList; public function SingletonXML() { if (_instance != null) trace("Constructor shouldn't be called directly... now I'll have to kill you")
_instance = this; this.initData(); } private function initData():void {
var service:HTTPService =new HTTPService();
service.url="Components/StudentData.xml"; service.resultFormat="e4x"; service.addEventListener("result", getResult); service.send();
} private function onDataLoaded():void { //Store data //this._data = [loaded data];
}
private function getResult(event:ResultEvent):void{ Alert.show("this is in get result");
_data=XMLList(event.result.Country);
}
public static function getInstance():SingletonXML{ if (! _instance) _instance = new SingletonXML(); return _instance;
} public function get data():XMLList {
Alert.show("this is in get data"); return this._data;
}
} } On Tue, Nov 3, 2009 at 4:38 PM, Andrea Giorgetta <andreagiorgetta@...> wrote:
Hi Kiran.
I think you should create a "ModelLocator" singleton class, that gets and store the xml information. It would be something like this:
public class MyModelLocator
{ private static var _instance: MyModelLocator;
private var _data:XMLList;
public function MyModelLocator() { if (_instance != null) trace("Constructor shouldn't be called directly... now I'll have to kill you")
_instance = this;
this.initData(); }
private function initData():void {
//Load data....
}
private function onDataLoaded() {
//Store data
this._data = [loaded data];
}
public static function getInstance():MyModelLocator{ if (! _instance) _instance = new MyModelLocator(); return _instance; }
public function get data():XMLList {
return this._data;
}
}
In order to get data in each combobox, you would set dataprovider="{MyModelLocator.getInstance.data}" (if that XMLList already has the correct structure to be directly used as a dataprovider in the combobox... otherwise now is the time to change it ;) )
This way:
- There's only one instance of MyModelLocator at anytime, anywhere.
- initData is called only once, so the data is retrieved only once.
- By storing the data within the singleton class, it's available to the whole application by just importing the class.
Hope it solves your issue.
Best regards
Andrea.
On Tue, Nov 3, 2009 at 5:59 PM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Hi ,
I am calling httpservice.send() method and getting the data and populating it in XMLList . I want this step to be done only once and want to reuse the data what ever I got .
My scenario is like this
1)Creating Custom combobox component 2) Calling send() in the custom component and populating the combobox
I want to create around 5 instances of the above component . But what is happening is the send() is getting called again and again . Is there any way to restrict this and get the data only once and use it for my 5 instances . The problem here is If I use http send() method when I load the application , This works perfect . But we want that to be called only from component and want to use the same component again and again.
Thanks for your help Kiran
-- Thanks, Vaibhav Seth.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Flex India Community" group. To post to this group, send email to flex_india@... To unsubscribe from this group, send email to flex_india+unsubscribe@... For more options, visit this group at http://groups.google.com/group/flex_india?hl=en
-~----------~----~----~----~------~----~------~--~---
|

|
[flex_india:26433] Re: Singleton Pattern Questions
Hi Dinukx, Thanks for your response and Could you please help me on IResponder interface ? I googled but no use Hi Andrea, Following is the format of XML data data we received .I just took the format from the XML and changed the names . Data we received is about 3 MB file and it is live data. Country,State,City and Student tags are repeated
<Edu > <Country name="United States" code="US"> <State name="Michigan" code="MI"> <City name="Auburn Hills">
<Student name="Kiran " /> <Student name = "Abhijith" /> </City> </State> <State name="Ohio" code="OH">
<City name="Coshocton">
<Student name="Andrea" />
<Student name = "John" />
</City>
</State> </Country> </Edu> Regards Kiran On Wed, Nov 4, 2009 at 11:53 PM, flexorz group of flex corders <flexcodrz@...> wrote:
i think Vaibhav solution should work ,but you have to update the model from the command it self. (try to look in to more Cairngorm solutions). only putting [binding] tag wont do the trick :)
the second option should be using and responder.(you may need to implement IResponder interface)
where you can create the asynchronous call and wait until the result is passed back to the result function or falut.
actually thats how even cairngrom works.
let me know if you need any help on that.
thanks dinukx
let me know if you need help with responder
Dinukx;
POC :
On Thu, Nov 5, 2009 at 1:08 AM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Hi Vaibhav,
Sorry no use ,still not working .
Regards Kiran
On Wed, Nov 4, 2009 at 12:38 PM, Vaibhav Seth <seth.vaibhav.08@...> wrote:
To avoid such kind of issues, better use Cairngorm. I doubt the problem is Binding. You have to bind data with the dataprovider of your component. So that, whenever your data will get populated it will be reflected in the component. Try using:
[Bindable]private var _data:XMLList;On Wed, Nov 4, 2009 at 11:59 AM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Thanks Vaibhav and Andrea for your suggestions.
Andrea : You suggestion looks working , But got in one more problem . Could you please help me ?
If I call SingletonXML.getInstance().data; It is returning Null because the of getResult() is returning the data later . Since the calls are asynchronous get Data() is getting called first and then getResult().
I checked the event data and data is there in the event .
I came into this problem because of "<XML source = "is crashing my IE7, Otherwise I could have done it using XML tag instead HTTPService ( for local data I am using HTTPService ) . Please see the code below.
package Components { import mx.controls.Alert; import mx.rpc.events.ResultEvent; import mx.rpc.http.HTTPService;
public class SingletonXML { private static var _instance: SingletonXML;
private var _data:XMLList; public function SingletonXML() { if (_instance != null) trace("Constructor shouldn't be called directly... now I'll have to kill you")
_instance = this; this.initData(); } private function initData():void {
var service:HTTPService =new HTTPService();
service.url="Components/StudentData.xml"; service.resultFormat="e4x"; service.addEventListener("result", getResult); service.send();
} private function onDataLoaded():void { //Store data //this._data = [loaded data];
}
private function getResult(event:ResultEvent):void{ Alert.show("this is in get result");
_data=XMLList(event.result.Country);
}
public static function getInstance():SingletonXML{ if (! _instance) _instance = new SingletonXML(); return _instance;
} public function get data():XMLList {
Alert.show("this is in get data"); return this._data;
}
} } On Tue, Nov 3, 2009 at 4:38 PM, Andrea Giorgetta <andreagiorgetta@...> wrote:
Hi Kiran.
I think you should create a "ModelLocator" singleton class, that gets and store the xml information. It would be something like this:
public class MyModelLocator
{ private static var _instance: MyModelLocator;
private var _data:XMLList;
public function MyModelLocator() { if (_instance != null) trace("Constructor shouldn't be called directly... now I'll have to kill you")
_instance = this;
this.initData(); }
private function initData():void {
//Load data....
}
private function onDataLoaded() {
//Store data
this._data = [loaded data];
}
public static function getInstance():MyModelLocator{ if (! _instance) _instance = new MyModelLocator(); return _instance; }
public function get data():XMLList {
return this._data;
}
}
In order to get data in each combobox, you would set dataprovider="{MyModelLocator.getInstance.data}" (if that XMLList already has the correct structure to be directly used as a dataprovider in the combobox... otherwise now is the time to change it ;) )
This way:
- There's only one instance of MyModelLocator at anytime, anywhere.
- initData is called only once, so the data is retrieved only once.
- By storing the data within the singleton class, it's available to the whole application by just importing the class.
Hope it solves your issue.
Best regards
Andrea.
On Tue, Nov 3, 2009 at 5:59 PM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Hi ,
I am calling httpservice.send() method and getting the data and populating it in XMLList . I want this step to be done only once and want to reuse the data what ever I got .
My scenario is like this
1)Creating Custom combobox component 2) Calling send() in the custom component and populating the combobox
I want to create around 5 instances of the above component . But what is happening is the send() is getting called again and again . Is there any way to restrict this and get the data only once and use it for my 5 instances . The problem here is If I use http send() method when I load the application , This works perfect . But we want that to be called only from component and want to use the same component again and again.
Thanks for your help Kiran
-- Thanks, Vaibhav Seth.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Flex India Community" group. To post to this group, send email to flex_india@... To unsubscribe from this group, send email to flex_india+unsubscribe@... For more options, visit this group at http://groups.google.com/group/flex_india?hl=en
-~----------~----~----~----~------~----~------~--~---
|

|
[flex_india:26435] Re: Singleton Pattern Questions
I agree with Vaibhav, you should use Cairngorm because it's a great framework that simplifies many repetitive tasks and "forces" the developer to create a better class model.
For this particular problem, it is not necesary, this "Kindof-ModelLocator-Singleton-Pattern" can be implemented anyway.
Solved it by changing:
- [Bindable] to full SingletonXML class. Sorry I miss that one in the first example.
- private var _data: ... to public var data, and remove the getter. Not sure why's that... :S
Attached my test code.
Hope this works.
Andrea
On Thu, Nov 5, 2009 at 11:51 AM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Hi Dinukx,
Thanks for your response and Could you please help me on IResponder interface ? I googled but no use
Hi Andrea,
Following is the format of XML data data we received .I just took the format from the XML and changed the names . Data we received is about 3 MB file and it is live data. Country,State,City and Student tags are repeated
<Edu > <Country name="United States" code="US"> <State name="Michigan" code="MI"> <City name="Auburn Hills">
<Student name="Kiran " /> <Student name = "Abhijith" /> </City> </State> <State name="Ohio" code="OH">
<City name="Coshocton"> <Student name="Andrea" /> <Student name = "John" /> </City> </State>
</Country> </Edu>
Regards Kiran
On Wed, Nov 4, 2009 at 11:53 PM, flexorz group of flex corders <flexcodrz@...> wrote:
i think Vaibhav solution should work ,but you have to update the model from the command it self. (try to look in to more Cairngorm solutions). only putting [binding] tag wont do the trick :)
the second option should be using and responder.(you may need to implement IResponder interface)
where you can create the asynchronous call and wait until the result is passed back to the result function or falut.
actually thats how even cairngrom works.
let me know if you need any help on that.
thanks dinukx
let me know if you need help with responder
Dinukx;
POC :
On Thu, Nov 5, 2009 at 1:08 AM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Hi Vaibhav,
Sorry no use ,still not working .
Regards Kiran
On Wed, Nov 4, 2009 at 12:38 PM, Vaibhav Seth <seth.vaibhav.08@...> wrote:
To avoid such kind of issues, better use Cairngorm. I doubt the problem is Binding. You have to bind data with the dataprovider of your component. So that, whenever your data will get populated it will be reflected in the component. Try using:
[Bindable]private var _data:XMLList;
On Wed, Nov 4, 2009 at 11:59 AM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Thanks Vaibhav and Andrea for your suggestions.
Andrea : You suggestion looks working , But got in one more problem . Could you please help me ?
If I call SingletonXML.getInstance().data; It is returning Null because the of getResult() is returning the data later . Since the calls are asynchronous get Data() is getting called first and then getResult().
I checked the event data and data is there in the event .
I came into this problem because of "<XML source = "is crashing my IE7, Otherwise I could have done it using XML tag instead HTTPService ( for local data I am using HTTPService ) . Please see the code below.
package Components { import mx.controls.Alert; import mx.rpc.events.ResultEvent; import mx.rpc.http.HTTPService;
public class SingletonXML { private static var _instance: SingletonXML;
private var _data:XMLList; public function SingletonXML() {
if (_instance != null) trace("Constructor shouldn't be called directly... now I'll have to kill you") _instance = this;
this.initData(); } private function initData():void {
var service:HTTPService =new HTTPService(); service.url="Components/StudentData.xml";
service.resultFormat="e4x"; service.addEventListener("result", getResult); service.send(); } private function onDataLoaded():void {
//Store data //this._data = [loaded data]; }
private function getResult(event:ResultEvent):void{
Alert.show("this is in get result");
_data=XMLList(event.result.Country);
} public static function getInstance():SingletonXML{
if (! _instance) _instance = new SingletonXML();
return _instance; } public function get data():XMLList {
Alert.show("this is in get data"); return this._data;
} } }
On Tue, Nov 3, 2009 at 4:38 PM, Andrea Giorgetta <andreagiorgetta@...> wrote:
Hi Kiran.
I think you should create a "ModelLocator" singleton class, that gets and store the xml information. It would be something like this:
public class MyModelLocator
{ private static var _instance: MyModelLocator;
private var _data:XMLList;
public function MyModelLocator() { if (_instance != null) trace("Constructor shouldn't be called directly... now I'll have to kill you")
_instance = this;
this.initData(); }
private function initData():void {
//Load data....
}
private function onDataLoaded() {
//Store data
this._data = [loaded data];
}
public static function getInstance():MyModelLocator{ if (! _instance) _instance = new MyModelLocator(); return _instance; }
public function get data():XMLList {
return this._data;
}
}
In order to get data in each combobox, you would set dataprovider="{MyModelLocator.getInstance.data}" (if that XMLList already has the correct structure to be directly used as a dataprovider in the combobox... otherwise now is the time to change it ;) )
This way:
- There's only one instance of MyModelLocator at anytime, anywhere.
- initData is called only once, so the data is retrieved only once.
- By storing the data within the singleton class, it's available to the whole application by just importing the class.
Hope it solves your issue.
Best regards
Andrea.
On Tue, Nov 3, 2009 at 5:59 PM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Hi ,
I am calling httpservice.send() method and getting the data and populating it in XMLList . I want this step to be done only once and want to reuse the data what ever I got . My scenario is like this
1)Creating Custom combobox component 2) Calling send() in the custom component and populating the combobox
I want to create around 5 instances of the above component . But what is happening is the send() is getting called again and again . Is there any way to restrict this and get the data only once and use it for my 5 instances . The problem here is If I use http send() method when I load the application , This works perfect . But we want that to be called only from component and want to use the same component again and again.
Thanks for your help Kiran
-- Thanks, Vaibhav Seth.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Flex India Community" group. To post to this group, send email to flex_india@... To unsubscribe from this group, send email to flex_india+unsubscribe@... For more options, visit this group at http://groups.google.com/group/flex_india?hl=en
-~----------~----~----~----~------~----~------~--~---
|

|
[flex_india:26443] Re: Singleton Pattern Questions
If you want to take a look at Cairngorm, this is an excellent example application developed using Cairngorm and was my first approach to the framework. It's not a simple example, but it explains a lot of things. Additionally, you should take a look at references on each base class and interface that is implemented (FrontController, IResponder, ICommand, etc).
Best regards.
Andrea
On Thu, Nov 5, 2009 at 12:27 PM, Andrea Giorgetta <andreagiorgetta@...> wrote:
I agree with Vaibhav, you should use Cairngorm because it's a great framework that simplifies many repetitive tasks and "forces" the developer to create a better class model.
For this particular problem, it is not necesary, this "Kindof-ModelLocator-Singleton-Pattern" can be implemented anyway.
Solved it by changing:
- [Bindable] to full SingletonXML class. Sorry I miss that one in the first example.
- private var _data: ... to public var data, and remove the getter. Not sure why's that... :S
Attached my test code.
Hope this works.
Andrea
On Thu, Nov 5, 2009 at 11:51 AM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Hi Dinukx,
Thanks for your response and Could you please help me on IResponder interface ? I googled but no use
Hi Andrea,
Following is the format of XML data data we received .I just took the format from the XML and changed the names . Data we received is about 3 MB file and it is live data. Country,State,City and Student tags are repeated
<Edu > <Country name="United States" code="US"> <State name="Michigan" code="MI"> <City name="Auburn Hills">
<Student name="Kiran " /> <Student name = "Abhijith" /> </City> </State> <State name="Ohio" code="OH">
<City name="Coshocton"> <Student name="Andrea" /> <Student name = "John" /> </City> </State>
</Country> </Edu>
Regards Kiran
On Wed, Nov 4, 2009 at 11:53 PM, flexorz group of flex corders <flexcodrz@...> wrote:
i think Vaibhav solution should work ,but you have to update the model from the command it self. (try to look in to more Cairngorm solutions). only putting [binding] tag wont do the trick :)
the second option should be using and responder.(you may need to implement IResponder interface)
where you can create the asynchronous call and wait until the result is passed back to the result function or falut.
actually thats how even cairngrom works.
let me know if you need any help on that.
thanks dinukx
let me know if you need help with responder
Dinukx;
POC :
On Thu, Nov 5, 2009 at 1:08 AM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Hi Vaibhav,
Sorry no use ,still not working .
Regards Kiran
On Wed, Nov 4, 2009 at 12:38 PM, Vaibhav Seth <seth.vaibhav.08@...> wrote:
To avoid such kind of issues, better use Cairngorm. I doubt the problem is Binding. You have to bind data with the dataprovider of your component. So that, whenever your data will get populated it will be reflected in the component. Try using:
[Bindable]private var _data:XMLList;
On Wed, Nov 4, 2009 at 11:59 AM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Thanks Vaibhav and Andrea for your suggestions.
Andrea : You suggestion looks working , But got in one more problem . Could you please help me ?
If I call SingletonXML.getInstance().data; It is returning Null because the of getResult() is returning the data later . Since the calls are asynchronous get Data() is getting called first and then getResult().
I checked the event data and data is there in the event .
I came into this problem because of "<XML source = "is crashing my IE7, Otherwise I could have done it using XML tag instead HTTPService ( for local data I am using HTTPService ) . Please see the code below.
package Components { import mx.controls.Alert; import mx.rpc.events.ResultEvent; import mx.rpc.http.HTTPService;
public class SingletonXML { private static var _instance: SingletonXML;
private var _data:XMLList; public function SingletonXML() {
if (_instance != null) trace("Constructor shouldn't be called directly... now I'll have to kill you") _instance = this;
this.initData(); } private function initData():void {
var service:HTTPService =new HTTPService(); service.url="Components/StudentData.xml";
service.resultFormat="e4x"; service.addEventListener("result", getResult); service.send(); } private function onDataLoaded():void {
//Store data //this._data = [loaded data]; }
private function getResult(event:ResultEvent):void{
Alert.show("this is in get result");
_data=XMLList(event.result.Country);
} public static function getInstance():SingletonXML{
if (! _instance) _instance = new SingletonXML();
return _instance; } public function get data():XMLList {
Alert.show("this is in get data"); return this._data;
} } }
On Tue, Nov 3, 2009 at 4:38 PM, Andrea Giorgetta <andreagiorgetta@...> wrote:
Hi Kiran.
I think you should create a "ModelLocator" singleton class, that gets and store the xml information. It would be something like this:
public class MyModelLocator
{ private static var _instance: MyModelLocator;
private var _data:XMLList;
public function MyModelLocator() { if (_instance != null) trace("Constructor shouldn't be called directly... now I'll have to kill you")
_instance = this;
this.initData(); }
private function initData():void {
//Load data....
}
private function onDataLoaded() {
//Store data
this._data = [loaded data];
}
public static function getInstance():MyModelLocator{ if (! _instance) _instance = new MyModelLocator(); return _instance; }
public function get data():XMLList {
return this._data;
}
}
In order to get data in each combobox, you would set dataprovider="{MyModelLocator.getInstance.data}" (if that XMLList already has the correct structure to be directly used as a dataprovider in the combobox... otherwise now is the time to change it ;) )
This way:
- There's only one instance of MyModelLocator at anytime, anywhere.
- initData is called only once, so the data is retrieved only once.
- By storing the data within the singleton class, it's available to the whole application by just importing the class.
Hope it solves your issue.
Best regards
Andrea.
On Tue, Nov 3, 2009 at 5:59 PM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Hi ,
I am calling httpservice.send() method and getting the data and populating it in XMLList . I want this step to be done only once and want to reuse the data what ever I got . My scenario is like this
1)Creating Custom combobox component 2) Calling send() in the custom component and populating the combobox
I want to create around 5 instances of the above component . But what is happening is the send() is getting called again and again . Is there any way to restrict this and get the data only once and use it for my 5 instances . The problem here is If I use http send() method when I load the application , This works perfect . But we want that to be called only from component and want to use the same component again and again.
Thanks for your help Kiran
-- Thanks, Vaibhav Seth.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Flex India Community" group. To post to this group, send email to flex_india@... To unsubscribe from this group, send email to flex_india+unsubscribe@... For more options, visit this group at http://groups.google.com/group/flex_india?hl=en
-~----------~----~----~----~------~----~------~--~---
|

|
[flex_india:26436] Re: Singleton Pattern Questions
Thanks a lot Andrea. That is working fine . But again have a question. Following is the exact replica of the combox what ever you added to the application . If I add this to the application it is not working . Could you please shed some light on this?
<?xml version="1.0" encoding="utf-8"?> <mx:ComboBox xmlns:mx=" http://www.adobe.com/2006/mxml" creationComplete="init()">
<mx:Script> <![CDATA[ import mx.collections.XMLListCollection; import Components.SingletonXML; import mx.controls.Alert;
[Bindable] private var xmlObj:XMLList; private function init():void{ xmlObj=SingletonXML.getInstance().data; this.dataProvider=xmlObj; this.labelField="@name"
} ]]> </mx:Script> </mx:ComboBox> On Thu, Nov 5, 2009 at 10:27 AM, Andrea Giorgetta <andreagiorgetta@...> wrote:
I agree with Vaibhav, you should use Cairngorm because it's a great framework that simplifies many repetitive tasks and "forces" the developer to create a better class model.
For this particular problem, it is not necesary, this "Kindof-ModelLocator-Singleton-Pattern" can be implemented anyway.
Solved it by changing:
- [Bindable] to full SingletonXML class. Sorry I miss that one in the first example.
- private var _data: ... to public var data, and remove the getter. Not sure why's that... :S
Attached my test code.
Hope this works.
Andrea
On Thu, Nov 5, 2009 at 11:51 AM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Hi Dinukx,
Thanks for your response and Could you please help me on IResponder interface ? I googled but no use
Hi Andrea,
Following is the format of XML data data we received .I just took the format from the XML and changed the names . Data we received is about 3 MB file and it is live data. Country,State,City and Student tags are repeated
<Edu > <Country name="United States" code="US"> <State name="Michigan" code="MI"> <City name="Auburn Hills">
<Student name="Kiran " /> <Student name = "Abhijith" /> </City> </State> <State name="Ohio" code="OH">
<City name="Coshocton"> <Student name="Andrea" /> <Student name = "John" /> </City> </State>
</Country> </Edu>
Regards Kiran
On Wed, Nov 4, 2009 at 11:53 PM, flexorz group of flex corders <flexcodrz@...> wrote:
i think Vaibhav solution should work ,but you have to update the model from the command it self. (try to look in to more Cairngorm solutions). only putting [binding] tag wont do the trick :)
the second option should be using and responder.(you may need to implement IResponder interface)
where you can create the asynchronous call and wait until the result is passed back to the result function or falut.
actually thats how even cairngrom works.
let me know if you need any help on that.
thanks dinukx
let me know if you need help with responder
Dinukx;
POC :
On Thu, Nov 5, 2009 at 1:08 AM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Hi Vaibhav,
Sorry no use ,still not working .
Regards Kiran
On Wed, Nov 4, 2009 at 12:38 PM, Vaibhav Seth <seth.vaibhav.08@...> wrote:
To avoid such kind of issues, better use Cairngorm. I doubt the problem is Binding. You have to bind data with the dataprovider of your component. So that, whenever your data will get populated it will be reflected in the component. Try using:
[Bindable]private var _data:XMLList;
On Wed, Nov 4, 2009 at 11:59 AM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Thanks Vaibhav and Andrea for your suggestions.
Andrea : You suggestion looks working , But got in one more problem . Could you please help me ?
If I call SingletonXML.getInstance().data; It is returning Null because the of getResult() is returning the data later . Since the calls are asynchronous get Data() is getting called first and then getResult().
I checked the event data and data is there in the event .
I came into this problem because of "<XML source = "is crashing my IE7, Otherwise I could have done it using XML tag instead HTTPService ( for local data I am using HTTPService ) . Please see the code below.
package Components { import mx.controls.Alert; import mx.rpc.events.ResultEvent; import mx.rpc.http.HTTPService;
public class SingletonXML { private static var _instance: SingletonXML;
private var _data:XMLList; public function SingletonXML() {
if (_instance != null) trace("Constructor shouldn't be called directly... now I'll have to kill you") _instance = this;
this.initData(); } private function initData():void {
var service:HTTPService =new HTTPService(); service.url="Components/StudentData.xml";
service.resultFormat="e4x"; service.addEventListener("result", getResult); service.send(); } private function onDataLoaded():void {
//Store data //this._data = [loaded data]; }
private function getResult(event:ResultEvent):void{
Alert.show("this is in get result");
_data=XMLList(event.result.Country);
} public static function getInstance():SingletonXML{
if (! _instance) _instance = new SingletonXML();
return _instance; } public function get data():XMLList {
Alert.show("this is in get data"); return this._data;
} } }
On Tue, Nov 3, 2009 at 4:38 PM, Andrea Giorgetta <andreagiorgetta@...> wrote:
Hi Kiran.
I think you should create a "ModelLocator" singleton class, that gets and store the xml information. It would be something like this:
public class MyModelLocator
{ private static var _instance: MyModelLocator;
private var _data:XMLList;
public function MyModelLocator() { if (_instance != null) trace("Constructor shouldn't be called directly... now I'll have to kill you")
_instance = this;
this.initData(); }
private function initData():void {
//Load data....
}
private function onDataLoaded() {
//Store data
this._data = [loaded data];
}
public static function getInstance():MyModelLocator{ if (! _instance) _instance = new MyModelLocator(); return _instance; }
public function get data():XMLList {
return this._data;
}
}
In order to get data in each combobox, you would set dataprovider="{MyModelLocator.getInstance.data}" (if that XMLList already has the correct structure to be directly used as a dataprovider in the combobox... otherwise now is the time to change it ;) )
This way:
- There's only one instance of MyModelLocator at anytime, anywhere.
- initData is called only once, so the data is retrieved only once.
- By storing the data within the singleton class, it's available to the whole application by just importing the class.
Hope it solves your issue.
Best regards
Andrea.
On Tue, Nov 3, 2009 at 5:59 PM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Hi ,
I am calling httpservice.send() method and getting the data and populating it in XMLList . I want this step to be done only once and want to reuse the data what ever I got . My scenario is like this
1)Creating Custom combobox component 2) Calling send() in the custom component and populating the combobox
I want to create around 5 instances of the above component . But what is happening is the send() is getting called again and again . Is there any way to restrict this and get the data only once and use it for my 5 instances . The problem here is If I use http send() method when I load the application , This works perfect . But we want that to be called only from component and want to use the same component again and again.
Thanks for your help Kiran
-- Thanks, Vaibhav Seth.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Flex India Community" group. To post to this group, send email to flex_india@... To unsubscribe from this group, send email to flex_india+unsubscribe@... For more options, visit this group at http://groups.google.com/group/flex_india?hl=en
-~----------~----~----~----~------~----~------~--~---
|

|
[flex_india:26447] Re: Singleton Pattern Questions
That's because assignation doesn't automatically bind xmlObj to SingletonXML data object, so changes at data doesn't reflect on xmlObj.
You must declare an explicit bound between xmlObj and SingletonXML.getInstance().data, like this:
<?xml version="1.0" encoding="utf-8"?> <mx:ComboBox xmlns:mx=" http://www.adobe.com/2006/mxml" creationComplete="init()">
<mx:Script> <![CDATA[ import mx.collections.XMLListCollection; import Components.SingletonXML; import mx.controls.Alert; [Bindable]
private var xmlObj:XMLList;
private function init():void{ xmlObj=SingletonXML.getInstance().data; this.dataProvider=xmlObj; this.labelField="@name" }
]]> </mx:Script> <mx:Binding source="SingletonXML.getInstance().data" destination="this.xmlObj" /> </mx:ComboBox>
Best regards.
Andrea
On Thu, Nov 5, 2009 at 1:40 PM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Thanks a lot Andrea. That is working fine . But again have a question. Following is the exact replica of the combox what ever you added to the application . If I add this to the application it is not working . Could you please shed some light on this?
<?xml version="1.0" encoding="utf-8"?>
<mx:ComboBox xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()">
<mx:Script> <![CDATA[ import mx.collections.XMLListCollection; import Components.SingletonXML; import mx.controls.Alert;
[Bindable] private var xmlObj:XMLList;
private function init():void{ xmlObj=SingletonXML.getInstance().data; this.dataProvider=xmlObj; this.labelField="@name"
} ]]> </mx:Script> </mx:ComboBox>
On Thu, Nov 5, 2009 at 10:27 AM, Andrea Giorgetta <andreagiorgetta@...> wrote:
I agree with Vaibhav, you should use Cairngorm because it's a great framework that simplifies many repetitive tasks and "forces" the developer to create a better class model.
For this particular problem, it is not necesary, this "Kindof-ModelLocator-Singleton-Pattern" can be implemented anyway.
Solved it by changing:
- [Bindable] to full SingletonXML class. Sorry I miss that one in the first example.
- private var _data: ... to public var data, and remove the getter. Not sure why's that... :S
Attached my test code.
Hope this works.
Andrea
On Thu, Nov 5, 2009 at 11:51 AM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Hi Dinukx,
Thanks for your response and Could you please help me on IResponder interface ? I googled but no use
Hi Andrea,
Following is the format of XML data data we received .I just took the format from the XML and changed the names . Data we received is about 3 MB file and it is live data. Country,State,City and Student tags are repeated
<Edu > <Country name="United States" code="US"> <State name="Michigan" code="MI"> <City name="Auburn Hills">
<Student name="Kiran " /> <Student name = "Abhijith" /> </City> </State> <State name="Ohio" code="OH">
<City name="Coshocton"> <Student name="Andrea" /> <Student name = "John" /> </City> </State>
</Country> </Edu>
Regards Kiran
On Wed, Nov 4, 2009 at 11:53 PM, flexorz group of flex corders <flexcodrz@...> wrote:
i think Vaibhav solution should work ,but you have to update the model from the command it self. (try to look in to more Cairngorm solutions). only putting [binding] tag wont do the trick :)
the second option should be using and responder.(you may need to implement IResponder interface)
where you can create the asynchronous call and wait until the result is passed back to the result function or falut.
actually thats how even cairngrom works.
let me know if you need any help on that.
thanks dinukx
let me know if you need help with responder
Dinukx;
POC :
On Thu, Nov 5, 2009 at 1:08 AM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Hi Vaibhav,
Sorry no use ,still not working .
Regards Kiran
On Wed, Nov 4, 2009 at 12:38 PM, Vaibhav Seth <seth.vaibhav.08@...> wrote:
To avoid such kind of issues, better use Cairngorm. I doubt the problem is Binding. You have to bind data with the dataprovider of your component. So that, whenever your data will get populated it will be reflected in the component. Try using:
[Bindable]private var _data:XMLList;
On Wed, Nov 4, 2009 at 11:59 AM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Thanks Vaibhav and Andrea for your suggestions.
Andrea : You suggestion looks working , But got in one more problem . Could you please help me ?
If I call SingletonXML.getInstance().data; It is returning Null because the of getResult() is returning the data later . Since the calls are asynchronous get Data() is getting called first and then getResult().
I checked the event data and data is there in the event .
I came into this problem because of "<XML source = "is crashing my IE7, Otherwise I could have done it using XML tag instead HTTPService ( for local data I am using HTTPService ) . Please see the code below.
package Components { import mx.controls.Alert; import mx.rpc.events.ResultEvent; import mx.rpc.http.HTTPService;
public class SingletonXML { private static var _instance: SingletonXML;
private var _data:XMLList; public function SingletonXML() {
if (_instance != null) trace("Constructor shouldn't be called directly... now I'll have to kill you") _instance = this;
this.initData(); } private function initData():void {
var service:HTTPService =new HTTPService(); service.url="Components/StudentData.xml";
service.resultFormat="e4x"; service.addEventListener("result", getResult); service.send(); } private function onDataLoaded():void {
//Store data //this._data = [loaded data]; }
private function getResult(event:ResultEvent):void{
Alert.show("this is in get result");
_data=XMLList(event.result.Country);
} public static function getInstance():SingletonXML{
if (! _instance) _instance = new SingletonXML();
return _instance; } public function get data():XMLList {
Alert.show("this is in get data"); return this._data;
} } }
On Tue, Nov 3, 2009 at 4:38 PM, Andrea Giorgetta <andreagiorgetta@...> wrote:
Hi Kiran.
I think you should create a "ModelLocator" singleton class, that gets and store the xml information. It would be something like this:
public class MyModelLocator
{ private static var _instance: MyModelLocator;
private var _data:XMLList;
public function MyModelLocator() { if (_instance != null) trace("Constructor shouldn't be called directly... now I'll have to kill you")
_instance = this;
this.initData(); }
private function initData():void {
//Load data....
}
private function onDataLoaded() {
//Store data
this._data = [loaded data];
}
public static function getInstance():MyModelLocator{ if (! _instance) _instance = new MyModelLocator(); return _instance; }
public function get data():XMLList {
return this._data;
}
}
In order to get data in each combobox, you would set dataprovider="{MyModelLocator.getInstance.data}" (if that XMLList already has the correct structure to be directly used as a dataprovider in the combobox... otherwise now is the time to change it ;) )
This way:
- There's only one instance of MyModelLocator at anytime, anywhere.
- initData is called only once, so the data is retrieved only once.
- By storing the data within the singleton class, it's available to the whole application by just importing the class.
Hope it solves your issue.
Best regards
Andrea.
On Tue, Nov 3, 2009 at 5:59 PM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Hi ,
I am calling httpservice.send() method and getting the data and populating it in XMLList . I want this step to be done only once and want to reuse the data what ever I got . My scenario is like this
1)Creating Custom combobox component 2) Calling send() in the custom component and populating the combobox
I want to create around 5 instances of the above component . But what is happening is the send() is getting called again and again . Is there any way to restrict this and get the data only once and use it for my 5 instances . The problem here is If I use http send() method when I load the application , This works perfect . But we want that to be called only from component and want to use the same component again and again.
Thanks for your help Kiran
-- Thanks, Vaibhav Seth.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Flex India Community" group. To post to this group, send email to flex_india@... To unsubscribe from this group, send email to flex_india+unsubscribe@... For more options, visit this group at http://groups.google.com/group/flex_india?hl=en
-~----------~----~----~----~------~----~------~--~---
|

|
[flex_india:26458] Re: Singleton Pattern Questions
Thanks a lot Andrea for your time and helping me to resolve my issue ( By taking it as your issue) and explaining me about few stuff . This cleared my questions. On Thu, Nov 5, 2009 at 7:39 PM, Andrea Giorgetta <andreagiorgetta@...> wrote:
That's because assignation doesn't automatically bind xmlObj to SingletonXML data object, so changes at data doesn't reflect on xmlObj.
You must declare an explicit bound between xmlObj and SingletonXML.getInstance().data, like this:
<?xml version="1.0" encoding="utf-8"?> <mx:ComboBox xmlns:mx=" http://www.adobe.com/2006/mxml" creationComplete="init()">
<mx:Script> <![CDATA[ import mx.collections.XMLListCollection; import Components.SingletonXML; import mx.controls.Alert; [Bindable]
private var xmlObj:XMLList;
private function init():void{ xmlObj=SingletonXML.getInstance().data; this.dataProvider=xmlObj; this.labelField="@name" }
]]> </mx:Script>
<mx:Binding source="SingletonXML.getInstance().data" destination="this.xmlObj" />
</mx:ComboBox>
Best regards.
Andrea
On Thu, Nov 5, 2009 at 1:40 PM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Thanks a lot Andrea. That is working fine . But again have a question. Following is the exact replica of the combox what ever you added to the application . If I add this to the application it is not working . Could you please shed some light on this?
<?xml version="1.0" encoding="utf-8"?>
<mx:ComboBox xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()">
<mx:Script> <![CDATA[ import mx.collections.XMLListCollection; import Components.SingletonXML; import mx.controls.Alert;
[Bindable] private var xmlObj:XMLList;
private function init():void{ xmlObj=SingletonXML.getInstance().data; this.dataProvider=xmlObj; this.labelField="@name"
} ]]> </mx:Script> </mx:ComboBox>
On Thu, Nov 5, 2009 at 10:27 AM, Andrea Giorgetta <andreagiorgetta@...> wrote:
I agree with Vaibhav, you should use Cairngorm because it's a great framework that simplifies many repetitive tasks and "forces" the developer to create a better class model.
For this particular problem, it is not necesary, this "Kindof-ModelLocator-Singleton-Pattern" can be implemented anyway.
Solved it by changing:
- [Bindable] to full SingletonXML class. Sorry I miss that one in the first example.
- private var _data: ... to public var data, and remove the getter. Not sure why's that... :S
Attached my test code.
Hope this works.
Andrea
On Thu, Nov 5, 2009 at 11:51 AM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Hi Dinukx,
Thanks for your response and Could you please help me on IResponder interface ? I googled but no use
Hi Andrea,
Following is the format of XML data data we received .I just took the format from the XML and changed the names . Data we received is about 3 MB file and it is live data. Country,State,City and Student tags are repeated
<Edu > <Country name="United States" code="US"> <State name="Michigan" code="MI"> <City name="Auburn Hills">
<Student name="Kiran " /> <Student name = "Abhijith" /> </City> </State> <State name="Ohio" code="OH">
<City name="Coshocton"> <Student name="Andrea" /> <Student name = "John" /> </City> </State>
</Country> </Edu>
Regards Kiran
On Wed, Nov 4, 2009 at 11:53 PM, flexorz group of flex corders <flexcodrz@...> wrote:
i think Vaibhav solution should work ,but you have to update the model from the command it self. (try to look in to more Cairngorm solutions). only putting [binding] tag wont do the trick :)
the second option should be using and responder.(you may need to implement IResponder interface)
where you can create the asynchronous call and wait until the result is passed back to the result function or falut.
actually thats how even cairngrom works.
let me know if you need any help on that.
thanks dinukx
let me know if you need help with responder
Dinukx;
POC :
On Thu, Nov 5, 2009 at 1:08 AM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Hi Vaibhav,
Sorry no use ,still not working .
Regards Kiran
On Wed, Nov 4, 2009 at 12:38 PM, Vaibhav Seth <seth.vaibhav.08@...> wrote:
To avoid such kind of issues, better use Cairngorm. I doubt the problem is Binding. You have to bind data with the dataprovider of your component. So that, whenever your data will get populated it will be reflected in the component. Try using:
[Bindable]private var _data:XMLList;
On Wed, Nov 4, 2009 at 11:59 AM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Thanks Vaibhav and Andrea for your suggestions.
Andrea : You suggestion looks working , But got in one more problem . Could you please help me ?
If I call SingletonXML.getInstance().data; It is returning Null because the of getResult() is returning the data later . Since the calls are asynchronous get Data() is getting called first and then getResult().
I checked the event data and data is there in the event .
I came into this problem because of "<XML source = "is crashing my IE7, Otherwise I could have done it using XML tag instead HTTPService ( for local data I am using HTTPService ) . Please see the code below.
package Components { import mx.controls.Alert; import mx.rpc.events.ResultEvent; import mx.rpc.http.HTTPService;
public class SingletonXML { private static var _instance: SingletonXML;
private var _data:XMLList; public function SingletonXML() {
if (_instance != null) trace("Constructor shouldn't be called directly... now I'll have to kill you") _instance = this;
this.initData(); } private function initData():void {
var service:HTTPService =new HTTPService(); service.url="Components/StudentData.xml";
service.resultFormat="e4x"; service.addEventListener("result", getResult); service.send(); } private function onDataLoaded():void {
//Store data //this._data = [loaded data]; }
private function getResult(event:ResultEvent):void{
Alert.show("this is in get result");
_data=XMLList(event.result.Country);
} public static function getInstance():SingletonXML{
if (! _instance) _instance = new SingletonXML();
return _instance; } public function get data():XMLList {
Alert.show("this is in get data"); return this._data;
} } }
On Tue, Nov 3, 2009 at 4:38 PM, Andrea Giorgetta <andreagiorgetta@...> wrote:
Hi Kiran.
I think you should create a "ModelLocator" singleton class, that gets and store the xml information. It would be something like this:
public class MyModelLocator
{ private static var _instance: MyModelLocator;
private var _data:XMLList;
public function MyModelLocator() { if (_instance != null) trace("Constructor shouldn't be called directly... now I'll have to kill you")
_instance = this;
this.initData(); }
private function initData():void {
//Load data....
}
private function onDataLoaded() {
//Store data
this._data = [loaded data];
}
public static function getInstance():MyModelLocator{ if (! _instance) _instance = new MyModelLocator(); return _instance; }
public function get data():XMLList {
return this._data;
}
}
In order to get data in each combobox, you would set dataprovider="{MyModelLocator.getInstance.data}" (if that XMLList already has the correct structure to be directly used as a dataprovider in the combobox... otherwise now is the time to change it ;) )
This way:
- There's only one instance of MyModelLocator at anytime, anywhere.
- initData is called only once, so the data is retrieved only once.
- By storing the data within the singleton class, it's available to the whole application by just importing the class.
Hope it solves your issue.
Best regards
Andrea.
On Tue, Nov 3, 2009 at 5:59 PM, Kiran Kumar Vasireddy <kiranvasi@...> wrote:
Hi ,
I am calling httpservice.send() method and getting the data and populating it in XMLList . I want this step to be done only once and want to reuse the data what ever I got . My scenario is like this
1)Creating Custom combobox component 2) Calling send() in the custom component and populating the combobox
I want to create around 5 instances of the above component . But what is happening is the send() is getting called again and again . Is there any way to restrict this and get the data only once and use it for my 5 instances . The problem here is If I use http send() method when I load the application , This works perfect . But we want that to be called only from component and want to use the same component again and again.
Thanks for your help Kiran
-- Thanks, Vaibhav Seth.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Flex India Community" group. To post to this group, send email to flex_india@... To unsubscribe from this group, send email to flex_india+unsubscribe@... For more options, visit this group at http://groups.google.com/group/flex_india?hl=en
-~----------~----~----~----~------~----~------~--~---
|