[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