Hi Brian,

This is a case of "static structure, dynamic behavior". Tapestry needs to know 
the mixin at page/component creation time, rather than at runtime.
This "early binding", if you will, let's tapestry do a lot of optimizations and 
enables behavior that would be otherwise cost-prohibitive (eg: I can't think of 
a reasonable way to implement @BindParameter if runtime-mixin selection was 
allowed).

Here's a potential workaround:

<t:block id="fee">
  <t:label t:for="residentFeeInquiryWithFeeMixin"/>
  <t:select t:id="residentFeeInquiryWithFeeMixin" 
t:mixins="feefromresidentupdater" clientId="residentFeeInquiry" .../>
</t:block>

<t:block id="singlesource">
  <t:label t:for="residentFeeInquiryWithSSMixin"/>
  <t:select t:id="residentFeeInquiryWithSSMixin" 
t:mixins="singlesourceformfieldupdater" clientId="residentFeeInquiry" .../>
</t:block>

<t:delegate to="prop:mixinBlock"/>

.java:

@Inject
private Block fee;
private Block singlesource;

public Block getMixinBlock() {
  if (getContainer() instanceof SendMoneyTransfer)
    return fee;
  return singlesource;
}

HTH,

Robert

On Mar 9, 2012, at 3/910:00 AM , Brian Long wrote:

> Hi all,
> 
> have a problem that seems easy to resolve but I'm making hard work of
> it, was hoping someone here can help me out. I have a simple component
> I want to use on different pages in my application, and there's a
> mixin associated with the select component in this simple component,
> but I want to use a different mixin depending on which type of page
> the component is located.
> 
> so I have in my component.tml
> 
>                <t:label t:for="residentFeeInquiry" id="resident-label"/>
>                <t:select t:id="residentFeeInquiry"
> t:validate="required" t:value="residentFeeInquiry"
> t:model="senderHasIdSelectModel" t:encoder="senderHasIdValueEncoder"
> t:mixins="mixin"
>                    t:blankOption="always"
> t:blankLabel="message:PLEASE_SELECT" t:label="message:RESIDENT"
> tabindex="${getResidentTabIndex()}"/>
> 
> and in my component.java
> 
>    public String getMixin() {
>       if (getContainer() instanceof SendMoneyTransfer) {
>               return "feefromresidentupdater";
>       }
>       return "singlesourceformfieldupdater";
>    }
> 
> getting "Unable to resolve 'mixin' to a mixin class name". Have tried
> prop:mixin, ${mixin}, ${prop:mixin} etc. to no avail, would like to
> avoid having multiple select components with different mixins and an
> if else(s) if possible?
> 
> Thanks for listening! Brian.
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> For additional commands, e-mail: users-h...@tapestry.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to