[Laszlo-dev] referencing nodes by id, how to set global vars?

Donald Anderson dda at ddanderson.com
Sat Feb 9 07:15:53 PST 2008


Why not wrap every function's contents with 'with (global)' ?

And can user code do this with top level vars?

    var blah = globalvar;

That would need to be fully qualified (either by smart compiler or  
user).

On Feb 9, 2008, at 7:32 AM, P T Withington wrote:

> This is probably the right time to bite the bullet and stop using  
> the global namespace.  It has already cause problems with name  
> collisions.  Per my comment, "global" should probably only mean "in  
> this canvas's scope".  So, yes create an object that holds these  
> global names.  Heck, you could even call it `global`... :)
>
> Our compiler already analyzes each method to determine if there are  
> free references in the method.  We could use this analysis to insert  
> a `with (global)` block around any such code, so that no user code  
> would have to change.
>
> On 2008-02-08, at 23:31 EST, Henry Minsky wrote:
>
>> In DHTML and AS2, we get away with doing this for setting node id's  
>> to
>> be global vars:
>>
>> function setID ( id ){
>>   //support for current system
>>   if ((typeof(id) == 'string') && id.length) {
>>       if ($debug) {
>>           if (global[id] && global[id] !== this) {
>>               Debug.warn('Redefining #%s from %w to %w',
>>                          id, global[id], this);
>>           }
>>       }
>>       this.id = id;
>>       // TODO: [2006-03-22 ptw] Should id's really go in the
>> user/canvas module?
>>       global[ id ] = this;
>>   } else {
>>       if ($debug) {
>>           // id is permitted to be null or undefined, meaning
>>           // "don't id me"
>>           if (id) {
>>               Debug.error('Invalid id %w for %w', id, this);
>>           }
>>       }
>>    }
>>   //namespace system
>>   //app[ id ] = this;
>>   //local reference
>>
>> }
>>
>> This works because we aliased "global" to _root in AS2, and to
>> "window" in DHTML.
>>
>> I don't see any way to do this in AS3. There doesn't seem to be any
>> magic object whose properties
>> become global vars. I'm not even sure how to get the runtime to set
>> global id variables by name procedurally during
>> instantiation even if we declare them.  I hacked the tag compiler to
>> emit a list of top level var declarations for all id's, but
>> I don't see how to emit the code for the instantiator to bind to them
>> when the nodes are created, because what can you put on the
>> left side of the assignment?
>>
>> One solution would be to make an API change, and require all globally
>> named nodes to be referenced via some object
>> like "lz", which we already are kind of pushing for class names.   
>> Tons
>> of user code would  have to be updated.
>>
>> To add one more twist of the knife, for the debugger eval mechanism,
>> if we want to use globals, we need to have a list of them
>> someplace to compile in to the little debugger stub template app,
>> because that code is compiled independent of the application code.
>>
>>
>>
>>
>>
>>
>> -- 
>> Henry Minsky
>> Software Architect
>> hminsky at laszlosystems.com
>


--

Don Anderson
Java/C/C++, Berkeley DB, systems consultant

voice: 617-547-7881
email: dda at ddanderson.com
www: http://www.ddanderson.com






More information about the Laszlo-dev mailing list