Interesting, Henry. That means constraints can only be used with most LFC and all LZX objects, not with anything on an AS3 level below the LFC? What was the reason to make some objects not extend LzEventable?

On Jun 22, 2009, at 12:29 AM, Henry Minsky wrote:


To debug this, you can actually look at the intermediate actionscript code which the compiler emitted, it will still be in those tmp files that it is printing out.

The code in the file in LzNode applyConstraintMethod corresponds to this line of code

      for (var i = 0, l = dependencies.length; i < l; i += 2) {
        dp = dependencies[i];
        if (dp) {
===> var d = new LzDelegate(this, constraintMethodName, dp, "on" + dependencies[i + 1]);
          this.__LZdelegates.push(d);
        }
      }

And I bet the issue is that you have a constraint expression in the
app, which is constraining a value of some object which is not an
LzEventable.

The signature of LzDelegate is
public function LzDelegate (context:LzEventable, methodName:String, eventSender:LzEventable = null, eventName:String = null) {

So both the target and the event source need to be LzEventable.

If you write a constraint that constrains to a value on an object that's does not obey the LzEventable protocol, then the system constructs a delegate that tries to register to get an event when the value changes, but it can't construct that delegate.

For example if you said

<myfoo bar="${some_non_node.foo + 1} ...>

And "some_non_node" is an object that isn't an LzNode ( or to be more exact, is not a subclass of LzEventable) then when that constraint gets installed, it will get the error you're seeing.

So check all you constraints and see if you're constraining to
something that isn't an LzEventable.

There are some things in the LFC which are NOT LzEventable, and we need to make the
compiler warn you somehow...


Reply via email to