Just to be clear, the idea proposed in
http://jira.openlaszlo.org/jira/browse/LPP-7816
is not yet implemented. Currently, you can only use <handler> to connect to an
event that is already declared (either explicitly using <event> or implicitly
on an attribute).
And one caution: If you create a handler on the implicit event associated with
a constrained attribute, the handler will _only_ be invoked when the attribute
changes value. Consider this example:
<canvas>
<view layout="axis: y; spacing: 5">
<attribute name="set" value="false" />
<attribute name="followset" value="${this.set}" />
<handler name="onset" args="newvalue">
Debug.info("set: %w", newvalue);
</handler>
<handler name="onfollowset" args="newvalue">
Debug.info("followset: %w", newvalue);
</handler>
<button onclick="parent.setAttribute('set', true)">setAttribute('set',
true)</button>
<button onclick="parent.setAttribute('set', new
Date())">setAttribute('set', new Date())</button>
<event name="send"/>
<handler name="send" args="eventvalue">
Debug.info("sent: %w", eventvalue);
</handler>
<button onclick="parent.send.sendEvent(true)">sendEvent(true)</button>
<button onclick="parent.send.sendEvent(new Date())">sendEvent(new
Date())</button>
</view>
</canvas>
Notice that although the handler "onset" is invoked every time you set the
attribute, whether the value changes or not, the hander "onfollowset" is _only_
invoked when the value it is constrained to changes. Personally, if I want to
send events, I prefer to be explicit about it, as shown in the second half of
the example, and declare the <event> and <hander> and use `sendEvent`, rather
than relying on the implicit events sent when attributes change.
On 2009-12-18, at 17:23, cem sonmez wrote:
> @P T Withington : I looked at your your solution for creating delegates.
> When i need to use the delegates, i m going to use the way that you
> mentioned. While looking at the developer documentation of openlaszlo, I
> hadnT understand the meaning of delegates and the usage of it. it seemed to
> me a bit confused :) Now, i think know more about delegates than before,
> thanks
>
> @jamesr : also thank you for the information. I worked out the problem. I
> used an attrbiute in the connection.lzx
>
> <attribute name="connectionOK" value="false" type="boolean"/>
>
> and in the case of "NetConnection.Connect.Success", i set it to true.
> Then while creating an object of sharedObject, i used like that :
>
> <sharedObjectChat id="soChat">
> <handler name="onconnectionOK" reference="conn">
> Debug.info("connectionOK attribute operation, value
> :%w",conn.connectionOK);
> if (conn.connectionOK==true) {
> //this.setAttribute("createSharedObject",true);
> this.connect("chat", conn._conn, true);
> this.so.client=this;
> }
> </handler>
> </sharedObjectChat>
>
> So itS ok now. İt is impossible to learn something wihout making mistakes :)
>
> Best regards.
>
> 2009/12/18 P T Withington <[email protected]>
>
>> I have a proposed "solution" for the LZX programmer having to create
>> delegates in script in:
>>
>> http://jira.openlaszlo.org/jira/browse/LPP-7816
>>
>> Basically, I want you to be able to declare a handler without attaching it
>> to an event at declaration time (and you would later use script to register
>> the handler on the event it is to handle). The main purpose for this change
>> is that <handler /> will automatically be managed, whereas delegates must be
>> manually managed (and destroyed) or they can lead to memory leaks.
>>
>> On 2009-12-18, at 16:03, jamesr wrote:
>>
>>> for the record, the two use cases for making a delegate are
>>>
>>> 1) you want to compute what object to latch onto programmatically and
>>> 2) you want to latch onto something that is not yet created at the
>> handler init phase.
>>>
>>> don't see any other use, although the two above are obviously important
>>>
>>> cem sonmez wrote:
>>>> you are exactly right. I want to make some operations when the
>> netconnection successful event is fired. Actually i m trying to get the
>> shared object on the server side, so at first i need a netconnection
>> instance to do that. ThatS why i thought that i should try delegates. I
>> havenT used delegates before, but i thought that this is the just one
>> solution to handle the operations depend on the related event.
>>>>
>>>> The method you said, using an attribute in the connection class seems
>> the better way. Till now, i havenT needed the delegates. I hope using
>> connection status attribute in the connection class will fix the problem.
>>>>
>>>> I m going to post back the results here of course.
>>>> Thanks for the reply J
>>>>
>>>> 2009/12/18 jamesr <[email protected] <mailto:[email protected]
>>>>
>>>>
>>>> I can tackle it. let's see; i'd write the following, after an
>>>> introduction (all code is untested and represents a pattern, adapt
>>>> it as you will)
>>>>
>>>> Your problem: You want to do is send a "connection successful"
>>>> event that you can catch, signaling that a method is to be called
>>>> to continue using the connection. You seem to be trying to do it
>>>> by setting up the delegate manually, when i think, looking at your
>>>> code, that you have hooks to fire events on laszlo nodes that can
>>>> communicate this state change.
>>>>
>>>> Solution: An event is anytime you use x.setAttribute() by the way
>>>> - that's what it does, makes sure that handlers are fired. That
>>>> said, if you declare an attribute of any laszlo node and in your
>>>> code, when you have success on your net connection, you say
>>>> "somenode.setAttribute('success, true);" then in another node you
>>>> can say, <handler name="onfoo" reference="somenode">...</handler>
>>>> and in that code you can then do what ever other steps are
>>>> required to use the connection.
>>>>
>>>> Further thought if i'm wrong: can you say why it is you decided to
>>>> use manual delegates? it might make things clearer for me, i've
>>>> not used the net connection code you have there but make guesses.
>>>>
>>>> .j.
>>>> cem sonmez wrote:
>>>>
>>>> doesnT anyone have any idea. I got stuck here. Waiting for
>>>> someones advices.
>>>> Thanks
>>>>
>>>> 2009/12/18 cem sonmez <[email protected]
>>>> <mailto:[email protected]> <mailto:[email protected]
>>>> <mailto:[email protected]>>>
>>>>
>>>>
>>>> hi
>>>> when i try do use the delegate such like :
>>>>
>>>> if( typeof this.del == "undefined" ) {
>>>> this.del = new LzDelegate(this, "connect('chat',
>> conn,
>>>> true)" );
>>>> } this.del.register(conn,
>>>> "netStatusHandler('NetConnection.Connect.Success')" );
>>>> }
>>>>
>>>> I m getting the error on the debug like :
>>>>
>>>> *soChat.connect('chat', conn, true) => (void 0) (must be a
>>>> function)*
>>>>
>>>> Actually i want to do this : call the *connect* method on the
>>>> class when the netStatusHandler method of the *conn* object
>> has
>>>> been completed. I m not sure that am i using the delegate
>>>> correctly (as i m getting the error, of course not :)).
>>>>
>>>> I have attached the relevant files.
>>>> Can anyone help me what i m missing to do.
>>>>
>>>> Kind regards.
>>>>
>>>> -- Cem SONMEZ
>>>>
>>>>
>>>>
>>>>
>>>> -- Cem SONMEZ
>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Cem SONMEZ
>>
>>
>
>
> --
> Cem SONMEZ