[Laszlo-dev] API change proposal: <node>/destroy behavior, when destroying child nodes recursively
André Bargull
andre.bargull at udo.edu
Tue Jan 27 06:46:42 PST 2009
On 1/27/2009 1:03 AM, P T Withington wrote:
> On 2009-01-26, at 18:24EST, André Bargull wrote:
>
>> Oh wait, you just said nothing in the LFC depends on the current way
>> things work. I really believed in you,
>
> But wait, I said:
>
> "where a child node _needs_ to access it's parent when the parent is in
> the process of being deleted"
>
> so, there may be cases where it _does_ access the parent, but does it
> _need_ to? I don't think it does. So it is just a matter of fixing
> those cases to be careful.
How do you plan to find those cases? Whenever (immediate)parent is
referenced, you need to add extra if-condition to protect against
nullpointer dereferencing. For example what is going to happen for
constraints? The example [2] isn't a real-life example (it makes no
sense to do anything like that), but through replication [1] and other
means, you can end up destroying the parent-node and then it's really
difficult to find the source of possible runtime errors.
>
> Both of your examples remind me of the chainsaw user who cuts the branch
> he is standing on and then complains that the chainsaw did not prevent
> him from a horrible accident. Are there really nodes that believe they
> can delete their own parent (knowing that will result in their own
> deletion)?
For example an one-way message dialog, if you close the dialog it should
be destroyed, too. So you add a button which calls destroy on the
parent-node on "onclick".
And I can also make the examples less obvious [1]:
- when replication is set to lazy, everything works
- but when replication is "normal", the app breaks and produces the same
error as in my earlier example
[1]
<canvas debug="true" >
<dataset name="ds" ><item /></dataset>
<view width="100%" height="100%" layout="axis:y" >
<view>
<datapath xpath="ds:/item" replication="normal" />
<view width="180" height="40" bgcolor="#eaeaea" clickable="true"
focusable="true" >
<text text="click and then press tab" />
<handler name="onclick" >
canvas.ds.appendChild(new lz.DataElement("item"));
</handler>
</view>
</view>
</view>
</canvas>
[2]
<canvas debug="true" >
<view>
<view width="100%" height="100%" bgcolor="#eaeaea" >
<handler name="onwidth" >
this.parent.destroy();
</handler>
</view>
</view>
</canvas>
More information about the Laszlo-dev
mailing list