You've got an extra level of indirection (with names) here that you don't need. 
 You should just use the object itself:

<canvas>
  <attribute name='zoomed' type='lz.view' value="null" />

  <class name="zoomingbutton" extends="button">
    <handler name='onclick'>
      var current = canvas.zoomed;
      if (current) {
        current.unzoomify();
      }
      canvas.zoomed = this;
      this.zoomify()
    </handler>
    <method name="zoomify">
      // Do the zooming and centering, etc.
    </method>
    <method name="unzoomify">
      // Back to normal
    </method>
  </class>

  <zoomingbutton ... />
  <zoomingbutton ... />
  <zoomingbutton ... />
</canvas>

On 2011-03-05, at 16:59, David Greisen wrote:

> It sounds like you need something like javascript's getElementById(). Then
> you could store the id of the open window in an attribute, then convert the
> id string into an object. I've looked through the docs and can't find
> anything like that for ids. Which is odd, and means I am almost certainly
> missing it.
> 
> If all of your buttons are in or about the same view you can accomplish this
> quite easily using names.
> 
> (not tested)
> 
> <view>
> <attribute name='openbutton' type='string' />
> <button name='button1'>
> <handler name='onclick'>
> if (parent.openbutton) {
>  var oldButton = parent[parent.openbutton];
>  oldButton.close();
>  }
> parent.openbutton = this.name;
> </handler>
> </button>
> </view>
> 
> On Sat, Mar 5, 2011 at 2:20 PM, Chris Janik <[email protected]> wrote:
> 
>> Sorry, I think my question was poorly put. Here's what I'm trying to do.
>> 
>> I've created a class of buttons that when pressed animate to the centre of
>> the screen and display a description of the item (see attached screenshot).
>> What I'm having trouble with is determining which button is open and closing
>> it when another button is pushed.
>> 
>> Here's own I'm calling the class (for testing purposes)
>>   <abutton id="PWNButton" x="1200" y="100" theText="desc:/desc/PWN/text()"
>> Logo="PWN" Site="http://www.yahoo.com"; 
>> <http://www.yahoo.com>ImageCalc="1.0350877193"/>
>> 
>> And here's the handler I was trying when a button is clicked
>> 
>> <handler name="onclick">
>>                Debug.write('Current open button = '+OpenButton);
>>                    if (OpenButton == null) {
>>                        OpenButton = classroot.id;
>>                        Debug.write('New open button = '+OpenButton);
>>                        classroot.OpenDisplay.doStart();
>>                        return;
>>                    } else {
>>                        OpenButton.CloseDisplay.doStart();
>>                        classroot.OpenDisplay.doStart();
>>                        OpenButton = classroot.id
>>                        Debug.write('New open button = '+OpenButton);
>>                    }
>>                </handler>
>> 
>> The problem is that when I do this I get "TypeError: Cannot call method
>> 'doStart' of undefined"  -  referring to OpenButton.CloseDisplay.doStart.
>> 
>> I suppose I could use a switch statement to decide which button is open by
>> creating an open attribute but this also seems a little messy.
>> 
>> Thanks for your reply,
>> 
>> ignotus
>> 
>> 
>> On 11-03-05 01:31 PM, David Greisen wrote:
>> 
>> You use the id as a drop-in replacement for your variable.
>> 
>> <canvas>
>> <view id='firstview' visible='false' />
>> <script>
>> Debug.debug(firstview.visible)
>> </script>
>> </canvas>
>> prints false to the debug console.
>> 
>> On Fri, Mar 4, 2011 at 6:54 PM, Chris Janik <[email protected]> wrote:
>> 
>>> Many times I've referenced an active view by opening them like so
>>> 
>>> OpenBW = new lz.BigWindow(canvas, {x:xcor, y:10, width:wid});
>>> 
>>> OpenBW = something like this <BigWindow>#3 /BigWindow
>>> 
>>> after doing this I can refer to that view using the variable OpenBW.
>>> 
>>> In a project I'm currently working on it would be pretty messy to spawn
>>> all of my views like the one above but I still would like to be able to
>>> reference them.
>>> 
>>> How can I do this?
>>> 
>>> I've tried to assign the Id of the view I want to control to a variable
>>> and I've also tried getUID but both of these return "TypeError: Cannot call
>>> method 'doStart' of undefined"
>>> 
>>> Can someone please help
>>> 
>>> --
>>> ignotus
>>> 
>>> 
>> 


Reply via email to