Ok, just trying to look through the code sample provided.... a little
confused due to my old code still being in there.....
On Sat, May 3, 2008 at 12:55 PM, Jim Hayes <[EMAIL PROTECTED]> wrote:
>
>
>
>
>
>
> It's because the loading of the text file is asynchronous, and in your
> example
>
>
> var myTxt2:LoadTextFile = new LoadTextFile("file2.txt");
> // populate my model with the results
> myprojectmodel.getInstance().mytext2 = myTxt2.data;
>
> you access it's data variable immediately after instructing it to load the
> text.
>
> Instead, you need to wait until that load is done before accessing data.
> I'd probably get the loadtextFile class to raise an event when that
> happens, have your main app listen for it.
>
>
> public function onCompleteTextLoad(e:Event):void
> {
> var vars:URLVariables = new URLVariables(e.target.data);
> trace("LOOK HERE: " + vars.thetext);
> this._mydata = vars.thetext;
> trace("from mydata: " + this._mydata);
>
> // If below added, the model is populated
> // myprojectmodel.getInstance().mytext2 = vars.thetext;
>
> this.dispatchEvent(new Event("LoadTextFile.dataloaded"));
>
>
> var myTxt2:LoadTextFile = new LoadTextFile("file2.txt");
> // populate my model with the results
> //myprojectmodel.getInstance().mytext2 = myTxt2.data;
> myTxt2.addEventListener("LoadTextFile.dataloaded", gotData)
>
> private function gotData(event:Event):void
> {
> var myTxt2:LoadTextFile = LoadTextFile(event.target)
>
> myprojectmodel.getInstance().mytext2 = myTxt2.data;
> myTxt2.removeEventListener("LoadTextFile.dataloaded", gotData);
> }
>
> LoadTextFile will have to extend EventDispatcher.
>
> HTH ! (been there myself, when I started!)
>
>
>
> -----Original Message-----
> From: [email protected] on behalf of dnk
> Sent: Sat 03/05/2008 20:22
> To: flexcoders list
> Subject: [flexcoders] Why would this assignment to a MVC model return null?
>
> Ok, I am using a easymvc structure (tom bray version), and i have run
> into an issue that is killing me!
>
> I am simply loading in some vars from a text file, and to do so i
> wrote a utility class (to make it reusable).
>
> Now in my class, if I populate my model var, it works fine. But it
> makes that class not very reusable.
>
> So I added a var to store the result, and made a getter method.
>
> Now in my utility class it looks like this:
>
> package myproject.util
> {
> // for text loading
> import flash.events.*;
> import flash.net.*;
>
> public class LoadTextFile
> {
>
> private var _mydata:String;
>
> public function LoadTextFile(myFile:String)
> {
> var req:URLRequest = new URLRequest(myFile);
> var url_loader:URLLoader = new URLLoader(req);
> url_loader.addEventListener(Event.COMPLETE, onCompleteTextLoad);
> url_loader.addEventListener(IOErrorEvent.IO_ERROR, onErrorTextLoad);
> //trace("called in loadTxtFile: " + myFile);
> }
>
> public function onCompleteTextLoad(e:Event):void
> {
> var vars:URLVariables = new URLVariables(e.target.data);
> trace("LOOK HERE: " + vars.thetext);
> this._mydata = vars.thetext;
> trace("from mydata: " + this._mydata);
>
> // If below added, the model is populated
> // myprojectmodel.getInstance().mytext2 = vars.thetext;
>
> }
>
> public function onErrorTextLoad(e:IOErrorEvent):void
> {
> trace("Something wrong! Could not load file.");
> }
>
> public function get data():String
> {
> return this._mydata;
> }
>
> }
> }
>
> The traces in the class come back with the proper data. So the _mydata
> var is populated.
>
> Now from my controller: I would have a function that contained
> something like this:
>
> // new instance
> var myTxt:LoadTextFile = new LoadTextFile("file.txt");
> // populate my model with the results
> myprojectmodel.getInstance().mytext = myTxt.data;
>
> // another instance
> var myTxt2:LoadTextFile = new LoadTextFile("file2.txt");
> // populate my model with the results
> myprojectmodel.getInstance().mytext2 = myTxt2.data;
>
> trace("From Data in controller using getter: " + myTxt.data);
>
> And this trace comes back null! WHich means it obviously never
> populates my model.
>
> Why would this happen?
>
> It seems to be pretty basic code. But I am driving myself insane!!!!
>
> DNK
>
> __________________________________________________________
> This communication is from Primal Pictures Ltd., a company registered in
> England and Wales with registration No. 02622298 and registered office: 4th
> Floor, Tennyson House, 159-165 Great Portland Street, London, W1W 5PA, UK.
> VAT registration No. 648874577.
>
> This e-mail is confidential and may be privileged. It may be read, copied
> and used only by the intended recipient. If you have received it in error,
> please contact the sender immediately by return e-mail or by telephoning
> +44(0)20 7637 1010. Please then delete the e-mail and do not disclose its
> contents to any person.
> This email has been scanned for Primal Pictures by the MessageLabs Email
> Security System.
> __________________________________________________________
>
>