On Thu, Nov 7, 2013 at 5:22 PM, Alex Harui <[email protected]> wrote:
>
>
> On 11/7/13 4:54 PM, "OmPrakash Muppirala" <[email protected]> wrote:
>
> >On Thu, Nov 7, 2013 at 4:41 PM, Alex Harui <[email protected]> wrote:
> >
> >>
> >>
> >> On 11/7/13 4:35 PM, "OmPrakash Muppirala" <[email protected]> wrote:
> >>
> >> >On Thu, Nov 7, 2013 at 2:18 PM, Alex Harui <[email protected]> wrote:
> >> >
> >> >> FWIW, I was thinking that this kind of check should be replaced by
> >>some
> >> >> capability in the tool chain to verify a configuration, maybe by
> >>marking
> >> >> some values as required. In production, you hopefully don't need
> >>these
> >> >> kinds of checks. I've also floated the idea of "debug-mode" beads
> >>which
> >> >> have more checks than production beads.
> >> >>
> >> >> Thoughts?
> >> >>
> >> >
> >> >Personally, I don't like the idea of setting the bead values in CSS.
> >>It
> >> >makes it hard to enforce these kind of things. Ideally, the absence
> >>of a
> >> >bead that the code is looking for should generate a compile error.
> >> >
> >> >Another way to inject beads would be to use metadata attributes.
> >> >Something
> >> >along the lines of spark skins' [SkinPart(required="true")] metadata
> >> >attribute. Would this make it easier to do the checks?
> >> That would help with the check, but are you also proposing naming the
> >> default value in the metadata?
> >>
> >>
> >Yes, setting the default values in metadata would be great. It is more in
> >tune with how Flex works in today.
> Maybe I'm not understanding. SkinPart doesn't set a default value. Lots
> of things are set in defaults.css. What metadata are you thinking of?
>
>
You are right. I was not very clear. One way to go about it is, in the
component:
ControlBar.as
[BeadReference("IBeadLayout", type="org.apache.flex.core.IBeadLayout",
required="true")]
public class ControlBar extends Container implements IContainer, IChrome
{
override public function addedToParent():void
{
super.addedToParent();
if( getBeadByType(IBeadLayout) == null ) {
var layout:IBeadLayout = new
(ValuesManager.valuesImpl.getValue(this, "IBeadLayout")) as IBeadLayout;
addBead(layout);
}
}
}
In the above approach, the component developer could specify all the beads
utilized in the component by listing them out at the top of the class.
Also, we could have stricter type checking by specifying the Interface the
bead should implement.
We could optionally mention if the bead is required or not. If it is not
required, then the component developer should be using a default one. If
an entry is 'required' and not available in the CSS file, the compiler
would throw an error.
Your thoughts on this approach?
I am thinking through another approach where we don't specify anything in
the .css file, but use a dependency injection paradigm more on the lines of
Parsley, Robotlegs, etc. Do you think that is worth discussing?
Thanks,
Om