On 7/9/07, kael <[EMAIL PROTECTED]> wrote:
>
> This doesn't work.  When the callback, dataReciever, is called it
> doesn't know what 'this' is any more.
> I want dataReciever to update the object and then call
> this.showRecord.
>
> SBP.prototype.dataReceiver = function(data) {
>     // data is an array of (id,text) things
>     alert(this.divID + ' dr')                                 // here,
> this.divD is undefined
>     this.data=data;
>     this.idx = 0;
>     this.showRecord(idx);
> };
>
> SBP.prototype.refreshRecords = function (){
>     epReq=loadJSONDoc(this.refreshJSON);
>     epReq.addCallbacks(this.dataReceiver,alertFailed);
>     alert(this.divID)                                         //
> this.divD here is correct
> };
>
> Does anybody care to point out the problems in the design?

Two major problems in the design.

1. Your code expects something asynchronous to happen as soon as the
next line of code executes. Asynchronous code by definition doesn't
work like that. Even if the code wasn't otherwise broken,
alert(this.divID) will never work where you put it. You can only
access it after the callback has happened, which means you either make
a second callback or you add it to the end of the code in your
existing callback.

2. JavaScript doesn't have bound methods. You can't use
"this.dataReceiver" as a callback. You can use method(this,
"dataReceiver") though, which will do the right thing.

-bob

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"MochiKit" group.
To post to this group, send email to mochikit@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/mochikit?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to