[Laszlo-dev] referencing nodes by id, how to set global vars?
P T Withington
ptw at openlaszlo.org
Sat Feb 9 04:32:35 PST 2008
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
More information about the Laszlo-dev
mailing list