[Laszlo-dev] how do I implement a mixin as in LZX?

Sarah Allen sarah at ultrasaurus.com
Fri Jan 9 10:00:54 PST 2009


I guess I don't really understand why they were used in the a/v  
extensions.  I'll take Max's word for it that the mediastream  
implementation does nothing and remove the mixin there.

On Jan 9, 2009, at 8:44 AM, P T Withington wrote:

> Note that mixin's are a 'power feature'.  I consider them to still  
> be experimental, which is why the documentation is scarce.  I don't  
> want them to be public, because I am not ready to commit to  
> supporting them.
>
> Also note that a <mixin> is very different from a `mixin`.  That is,  
> the LZX version is quite different from the JS version.  The JS  
> version is pretty much a standard implementation of what CS would  
> consider a mixin (which is in CS considered a dangerous power tool,  
> not to be used lightly -- it's why Java and C# don't have them).   
> The LZX version is even crazier, because _I_assume_ an LZX mixin  
> needs to know how to mix in child nodes, states, placement,  
> handlers, constraints, etc., etc., etc. which are not something you  
> have in a plain old O-O language.
>
> Bottom line:  mixins are an optimization and you should follow my  
> usual rules about optimization when considering them:
>
> Rule 1:  Don't use them.
> Rule 2 (for experts only):  Don't use them yet.
>
> (paraphrased from M. A. Jackson)
>
> On 2009-01-09, at 07:50EST, Max Carlson wrote:
>
>> Since that mixin isn't really doing anything, you should be able to  
>> just get rid of it.  See tests/mixin for an example of how to do  
>> this in LZX, or http://jira.openlaszlo.org/jira/browse/LPP-2302 for  
>> the gory details.
>>
>> Once we get all the code converted back to LZX syntax, we might  
>> want to add a mixin that implements the runtime-specific bits.
>>
>> Sarah Allen wrote:
>>> I'm refactoring the av mediastream component to be regular LZX,  
>>> but I'm not familiar with the mixin syntax and I can find  
>>> documentation about (no luck with google or the ref guide... maybe  
>>> I'm blind)
>>> Here's the snippet that I want to write the "new" way...
>>> <script when="immediate"><![CDATA[
>>>   mixin NewmediastreamShared {
>>>       function NewmediastreamShared ( parent:LzView? = null ,  
>>> attrs:Object? = null , children:Array? = null, instcall:Boolean  =  
>>> false) {
>>>           super(parent, attrs, children, instcall);
>>>       }
>>>   }
>>> ]]></script-->
>>> (Trying to avoid that nasty setter bug, which I think is at the  
>>> root of why recording is broken)
>>> Sarah
>>
>> -- 
>> Regards,
>> Max Carlson
>> OpenLaszlo.org
>



More information about the Laszlo-dev mailing list