On 2016-12-08 21:23, Bleiler, Timothy wrote:
I’m curious about what appears to me to be a confusing aspect of the
implementation of behaviors. In short, behaviors have characteristics
of an isolated, local extension of the message path AND
characteristics of a concatenation of the parent control’s script. I’m
raising the issue for two reasons: 1) to clarify how to explain
behaviors to someone new to Livecode or just learning about the
feature and 2) to question if all the features of behaviors are
intentional or if some might be accidents of implementation and
therefore may be eliminated in the future.

The design of behaviors was to allow sharing of code amongst controls. Indeed, the premise was that, given any control A, the following steps would cause no change in functionality of A:

  1) create button B
  2) set the script of button B to the script of control A
  3) set the script of control A to empty
  4) set the behavior of control A to the long id of button B

In order for this to be the case, two things have to be true:

1) Behaviors must keep a 'private' copy of their script locals for each control using that behavior

2) 'me' must always resolve to the control using the behavior, even when in the behavior script

The key thing here is that when you call a handler from a script, unless it is bound to a private handler in the same script, the request will pass through the message path targeting 'me' - so first frontScripts will trigger, then me, then the owner of me etc. Rule (2) preserves this semantic for behaviors and, indeed, codifies the fact that behaviors aren't really objects - they are script extensions (for want of a better term).

The reason you see friction between what happens in the behavior chain, and what happens in the ownership chain simply comes down to the fact that when considering the ownership chain you are dealing with multiple distinct objects and thus there is more than one object which is being targetted by messages. In contrast, when you are considering the behavior chain there is only ever a single real object - the control using the chain - thus there is only one thing that can be the target of message sends.

Hope this helps,

Mark.

--
Mark Waddingham ~ m...@livecode.com ~ http://www.livecode.com/
LiveCode: Everyone can create apps

_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to