[Laszlo-dev] API proposal for how setter methods are overridden (and how super works in them)

P T Withington ptw at laszlosystems.com
Fri Jul 25 08:18:59 PDT 2008


Currently in LZX, you can create a (n anonymous) setter for your  
attribute by saying:

  <class name="base">
    <attribute name="foo" setter="this.foostate = frob(foo)" />
    ...
  </class>

Recently, the question came up:  "how do you override that setter in a  
subclass, and how do you call the superclass setter from the  
override?"  The following proposal addresses the question:

In a subclass, you override a setter by naming the same attribute and  
giving a new setter:

  <class name="sub" extends="base">
    <attribute name="foo" setter="..." />

If you want to invoke the superclass setter, you use  
`super.setAttribute('foo', ...`:

  <class name="sub" extends="base">
    <attribute name="foo" setter="this.note('setting foo');  
super.setAttribute('foo', foo)" />

For legibility, we would also like to introduce a new <setter> tag  
that allows you to write a setter more in the style of a method, for  
cases of complex setters.  Hence the above could also be written:

<class name="sub" extends="base">
   <setter name="foo" args="newfoo">
     this.note('Setting foo to: ' + newfoo);
     super.setAttribute('foo', newfoo);
  </setter>

Comments?


More information about the Laszlo-dev mailing list