If you are using OpenLaszlo Trunk, or expecting to upgrade to OpenLaszlo 4.1 when it is released, you should be aware of the following changes coming your way:

+ The syntax <method event="eventname"> is now deprecated and will trigger a compiler warning. You should update your code to use <handler name="eventname">. In the case where the method is named (<method event="eventname" name="methodname">) you will have to split the declaration into a handler (<handler name="eventname" method="methodname" />) and a method (<method name="methodname">). [This syntax allows subclasses to override the method that will be handling the event. See the documentation for `handler` for further details and examples.]

+ In previous versions of LZX, you could potentially create a duplicate attribute with no warning from the compiler. For example:

<class name="zot">
  <attribute name="name" value="${'bar'}" />
</class>

In the above example, the attribute named `name` is defined both in the open tag of the class and as an attribute. This is illegal and could lead to ambiguous or unpredictable results. The compiler will now warn that you have a duplicated attribute. You will have to rename one of the duplicate cases to ensure that your code works as expected.

+ Classes defined using the <class name="name"> _must_ be referenced in script as `lz.name`, there will no longer be a global alias `name` that refers to the class implementing the tag.

+ The classes that represent LZX-defined classes now have an internal name. If you want to know the name of the tag that defined an object, you should ask
`<object>.constructor.tagname`, not `<object>.constructor.classname`.

+ `getAttribute` is deprecated. You should just reference the attribute directly. getters are no longer supported.

---

You can prepare for the above changes by updating your code now, since the forward-compatible techniques are all already supported in 4.0.

---

The following change should not affect user code:

+ Initial values, initial expressions ($once, $path, $style, and $always), now are created as a unified list in the tag compiler solving several issues with overriding/inheritance of attribute values and constraints and enabling the solution to an issue with states and constraints. As a result, if you override `LzNode#construct`, and attempt to manipulate the `args` list, you must be aware that some values in that list will be `LzInitExpr`s and cannot be directly inspected. These value represent consraints that will be applied by LzNode#__LZapplyArgs.

If you _do_ have classes that override `construct` _and_ expect to manipulate the args to that method, you will have to update your code when moving to 4.1. You can prepare for this by testing your code against trunk.

Reply via email to