Hi there,

On 15/06/2006, at 7:56 AM, David Masters wrote:

On 14 Jun 2006, at 12:54, John Stewart wrote:

If I create a ul wrapper "styleContainer" as below, I'd like to
include the "open" or "closed" styles, as well as a common "clear"
style.

The output would be of the form:

<!-- isOpen = true: -->
 <ul class="clear open">
   <li>...</li>
 </ul>


<!-- isOpen = false: -->
 <ul class="clear closed">
   <li>...</li>
 </ul>

One approach (as I think David LeBer mentioned) is to avoid the use of conditionals in the WOComponent with the use of WOGenericContainers, and a method in the .java file to return the class name as a String. For example, create a generic container with the element name of 'ul' and bind its (css) class to the method.

In .html:

        <webobject name="Generic1">
                ...list repetition goes here...
        </webobject>

In .wod:

        Generic1: WOGenericContainer
        {
                elementName = "ul";
                class = classForList;
        }

Actually, to achieve what you want (in having your components' java void of any view logic) create your own GenericContainer (etc for other reusable components) that has at least the following in its java implementation:

--- LDGenericContainer.wo/LDGenericContainer.html ---
<webobject name="Container"><webobject name="String"></ webobject><webobject name="Content"></webobject></webobject>

--- LDGenericContainer.wo/LDGenericContainer.wod ---
Container: WOGenericContainer {
        elementName = ^elementName;
        invokeAction = ^invokeAction;
        formValue = ^formValue;
        elementID = ^elementID;
        omitTags = ^omitTags;
        otherTagString = otherTagString;
}

Content: WOComponentContent {}

String: WOString {
    value = ^string;
}

--- LDGenericContainer.java ---
public class LDGenericContainer extends WOComponent {
        
        public LDGenericContainer( WOContext context ) {
                super( context );
        }
        
        protected void append( Object value, StringBuffer buff ) {
                if ( value != null ) {
                        if ( buff.length() > 0 )
                                buff.append( " " );
                        buff.append( value );
                }
        }

        public String classString() {
                StringBuffer buff;
                
                buff = new StringBuffer();
                for ( int i = 1; true; i++ ) {
                        if ( ! hasBinding( "class" + i ) ) {
                                break;
                        }
                        buff.append( valueForBinding( "class" + i ) );
                }
                if ( buff.length() > 0 ) {
                        buff.insert( 0 , "class=\"" );
                        buff.append( "\"" );
                }
                return buff.toString();
        }

        <...>
        
        public String otherTagString() {
                StringBuffer result;
                Object value;
                
                result = new StringBuffer();
                if ( hasBinding( "otherTagString" ) ) {
                        append( valueForBinding( "otherTagString" ), result );
                }
                append( classString(), result );
                
                return result.toString();
        }
        
}

Example use:
SomeList: LDGenericContainer {
        <...>
        class1 = "clear";
        class2 = "open";
        ...
        classN = "blah";
}

with regards,
--

Lachlan Deck


_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to