[Laszlo-dev] referencing nodes by id, how to set global vars?
P T Withington
ptw at pobox.com
Sat Feb 9 10:07:49 PST 2008
I only suggest the conditional wrapping for performance reasons...
'with' does not come for free. And the compiler is already doing the
necessary analysis.
On Feb 9, 2008, at 10:15, Donald Anderson <dda at ddanderson.com> wrote:
> 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