Just tried Profiler and it does show multiple Instances of ModelLocator that are increasing every time I run the screen.
On Thu, Nov 13, 2014 at 3:43 PM, mark goldin <[email protected]> wrote: > 1. singleton: > package > { > import com.adobe.cairngorm.model.IModelLocator; > import com.instepsoftware.prism.vo.AutoGenerated.ReportResult; > import flash.events.EventDispatcher; > > [Bindable] > public class ModelLocator extends EventDispatcher implements IModelLocator > { > private static var _instance:ModelLocator = new ModelLocator(); > public var healthReport:ReportResult; > > public function ModelLocator() > { > } > public static function getInstance():ModelLocator > { > return _instance; > } > } > } > 2. ReportResult: > package > { > > [Bindable] > [RemoteClass(alias=".............ReportResult")] > public class ReportResult > { > public var ReportXMLDoc:String = null; > } > } > Command to handle EventWhichWillPopulateData event: > private var _Model:ModelLocator = ModelLocator.getInstance(); > public function result(data:Object):void > { > var re:ResultEvent = data as ResultEvent; > _Model.healthReport = re.result as ReportResult; > // data is here every time I run it > } > 3. Implementation: > mxml file: > creationComplete="creationCompleteHandler(event)" > ...... > [Bindable] > private var _ModelLocator = ModelLocator.getInstance(); > .... > protected function creationCompleteHandler(event:FlexEvent):void > { > dispatchEvent(new EventWhichWillPopulateData()); > } > > <anothercomponenttoshowdata> > dataProvider="{_ModelLocator.healthReport}" > </anothercomponenttoshowdata> > end of mxml file > > > 4. anothercomponenttoshowdata: > public function set dataProvider(value:ReportResult):void > { > if (value) > { > ....... > } > } > > That is close to real code. > I know for sure that _ModelLocator.healthReport gets data in the result > function. The whole thing works for the one time only. > Any consecutive run will have _ModelLocator.healthReport = null in set > dataProvider. > > That's how the whole chain of questions was triggered because I started > looking for workarounds. > > Sorry if that is still not clear. > > > On Thu, Nov 13, 2014 at 3:19 PM, mark goldin <[email protected]> > wrote: > >> I will try again. But this is a commercial application we are talking >> about and it takes some effort to prepare simplified code. Otherwise I >> would just dumb the whole damn thing. >> >> On Thu, Nov 13, 2014 at 3:17 PM, mark goldin <[email protected]> >> wrote: >> >>> Agree about details. But do not with overlapping. >>> Your label does not show its text. Can you imagine how many problems >>> that can be caused by? But here we are talking about singletons and >>> binding, a bit more complicated, at least for me. >>> >>> On Thu, Nov 13, 2014 at 3:12 PM, OmPrakash Muppirala < >>> [email protected]> wrote: >>> >>>> On Thu, Nov 13, 2014 at 1:09 PM, mark goldin <[email protected]> >>>> wrote: >>>> >>>> > I am very sorry for the confusion. I do have it in exactly same way. >>>> I was >>>> > trying not to provide too much details. What can I say ... >>>> > >>>> > >>>> You should always try to provide as much detail as possible when asking >>>> a >>>> question. Also, please try not to create multiple threads at the same >>>> time >>>> talking about overlapping issues. >>>> >>>> Thanks, >>>> Om >>>> >>>> >>>> > On Thu, Nov 13, 2014 at 3:04 PM, Alex Harui <[email protected]> wrote: >>>> > >>>> > > In this example, the ‘data’ property is an Object. Properties >>>> assigned >>>> > to >>>> > > Objects are not bindable. There should have been warnings in the >>>> compile >>>> > > output or in the console at runtime. >>>> > > >>>> > > If you know the set of properties on the data object, you should >>>> define a >>>> > > class for that. >>>> > > >>>> > > [Bindable] >>>> > > public class MyModelDataSubObject >>>> > > { >>>> > > public var propOnData:String; >>>> > > } >>>> > > >>>> > > And: >>>> > > >>>> > > [Bindable] >>>> > > public class ModelLocator extends EventDispatcher implements >>>> > IModelLocator >>>> > > { >>>> > > private static var _instance:ModelLocator; >>>> > > public var data:MyModelDataSubObject; >>>> > > public function ModelLocator(enforcer:SingletonEnforcer) >>>> > > .. >>>> > > >>>> > > >>>> > > -Alex >>>> > > >>>> > > On 11/13/14, 12:49 PM, "mark goldin" <[email protected]> wrote: >>>> > > >>>> > > >Something like this. A bit simplified: >>>> > > >package >>>> > > >{ >>>> > > > >>>> > > >[Bindable] >>>> > > >public class ModelLocator extends EventDispatcher implements >>>> > IModelLocator >>>> > > >{ >>>> > > >private static var _instance:ModelLocator; >>>> > > >public var data:Object; >>>> > > > public function ModelLocator(enforcer:SingletonEnforcer) >>>> > > >{ >>>> > > >if (enforcer == null){ >>>> > > >throw new Error("You can have only one ModelLocator"); >>>> > > >} >>>> > > >} >>>> > > > public static function getInstance():ModelLocator{ >>>> > > > if (_instance == null){ >>>> > > >_instance = new ModelLocator(new SingletonEnforcer()); >>>> > > > } >>>> > > > return _instance; >>>> > > > } >>>> > > >} >>>> > > >} >>>> > > >class SingletonEnforcer{} >>>> > > > >>>> > > > >>>> > > >On Thu, Nov 13, 2014 at 2:44 PM, Alex Harui <[email protected]> >>>> wrote: >>>> > > > >>>> > > >> Declaring a class [Bindable] does not make its sub-objects >>>> bindable. >>>> > > >>Show >>>> > > >> us the code for the model’s data property. >>>> > > >> >>>> > > >> -Alex >>>> > > >> >>>> > > >> On 11/13/14, 12:31 PM, "mark goldin" <[email protected]> >>>> wrote: >>>> > > >> >>>> > > >> >It's an object. The whole model class is Bindable. >>>> > > >> > >>>> > > >> >On Thu, Nov 13, 2014 at 2:11 PM, Alex Harui <[email protected]> >>>> > wrote: >>>> > > >> > >>>> > > >> >> It appears you are binding to sub-objects in the model, and >>>> they >>>> > may >>>> > > >>not >>>> > > >> >> be bindable. What is _model.data? >>>> > > >> >> >>>> > > >> >> -Alex >>>> > > >> >> >>>> > > >> >> On 11/13/14, 10:49 AM, "mark goldin" <[email protected]> >>>> > wrote: >>>> > > >> >> >>>> > > >> >> >No, they are not static. I even replaces public var ... with >>>> > setter >>>> > > >>and >>>> > > >> >> >getter. Still the same. >>>> > > >> >> >Here more code for singleton: >>>> > > >> >> >public var data:Object; >>>> > > >> >> >public function ModelLocator(enforcer:SingletonEnforcer) >>>> > > >> >> >{ >>>> > > >> >> >if (enforcer == null){ >>>> > > >> >> >throw new Error("You can have only one ModelLocator"); >>>> > > >> >> >} >>>> > > >> >> >} >>>> > > >> >> > public static function getInstance():ModelLocator{ >>>> > > >> >> > if (_instance == null){ >>>> > > >> >> >_instance = new ModelLocator(new SingletonEnforcer()); >>>> > > >> >> > } >>>> > > >> >> > return _instance; >>>> > > >> >> > } >>>> > > >> >> >class SingletonEnforcer{} >>>> > > >> >> > >>>> > > >> >> > >>>> > > >> >> >In another class I am getting an instance of singleton: >>>> > > >> >> >private var _model:ModelLocator = ModelLocator.getInstance(); >>>> > > >> >> > >>>> > > >> >> >BindingUtils.bindSetter(onDataLoaded, _Model.data, >>>> "propOnData"); >>>> > > >> >> >new GetDataEvent().dispatch(); >>>> > > >> >> > >>>> > > >> >> >public function onDataLoaded(value:String):void >>>> > > >> >> >{ >>>> > > >> >> >trace(2); >>>> > > >> >> >if (value) >>>> > > >> >> >{ >>>> > > >> >> >...... >>>> > > >> >> >} >>>> > > >> >> >} >>>> > > >> >> > >>>> > > >> >> >this is a command that set to get data when GetDataEvent >>>> event is >>>> > > >> >> >triggered: >>>> > > >> >> > >>>> > > >> >> >public function result(data:Object):void >>>> > > >> >> >{ >>>> > > >> >> >var re:ResultEvent = data as ResultEvent; >>>> > > >> >> >_assetHealthModel.data = re.result as Object; >>>> > > >> >> >trace(1); >>>> > > >> >> >} >>>> > > >> >> > >>>> > > >> >> >In Console I see >>>> > > >> >> >2 >>>> > > >> >> >1 >>>> > > >> >> > >>>> > > >> >> >but never 2 again. >>>> > > >> >> > >>>> > > >> >> >Hope, it's clear. >>>> > > >> >> > >>>> > > >> >> >Thanks >>>> > > >> >> > >>>> > > >> >> > >>>> > > >> >> >On Thu, Nov 13, 2014 at 12:37 PM, Alex Harui < >>>> [email protected]> >>>> > > >>wrote: >>>> > > >> >> > >>>> > > >> >> >> >>>> > > >> >> >> >>>> > > >> >> >> On 11/13/14, 10:04 AM, "mark goldin" < >>>> [email protected]> >>>> > > >>wrote: >>>> > > >> >> >> >>>> > > >> >> >> >Here is singleton definition: >>>> > > >> >> >> >[Bindable] >>>> > > >> >> >> >public class ModelLocator extends EventDispatcher >>>> implements >>>> > > >> >> >>IModelLocator >>>> > > >> >> >> > >>>> > > >> >> >> >All properties on that class are public vars. >>>> > > >> >> >> >>>> > > >> >> >> I’ll assume you are trying to tell me that they are not >>>> public >>>> > > >>static >>>> > > >> >> >>vars? >>>> > > >> >> >> >>>> > > >> >> >> When we’ll need to know more about how the instance is >>>> shared, >>>> > > >> >>whether >>>> > > >> >> >>you >>>> > > >> >> >> are getting warnings and compile time or runtime, and >>>> probably >>>> > > >>more >>>> > > >> >> >> details about what the symptoms are. >>>> > > >> >> >> >>>> > > >> >> >> -Alex >>>> > > >> >> >> >>>> > > >> >> >> >>>> > > >> >> >>>> > > >> >> >>>> > > >> >>>> > > >> >>>> > > >>>> > > >>>> > >>>> >>> >>> >> >
