Amazing, thanks for the example here. My implementation isn't exactly the same, but your code example made the concept quite clear and I've got it working now. Thanks!

On 04/06/2011 01:14 PM, Taha Hafeez wrote:
Dear Rich

I tried to implement what you desired ( to the best of my understanding)

this is it

import org.apache.tapestry5.ClientElement;
import org.apache.tapestry5.ComponentResources;
import org.apache.tapestry5.Link;
import org.apache.tapestry5.annotations.Environmental;
import org.apache.tapestry5.annotations.Import;
import org.apache.tapestry5.annotations.InjectContainer;
import org.apache.tapestry5.annotations.Parameter;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.json.JSONObject;
import org.apache.tapestry5.services.javascript.JavaScriptSupport;

@Import(library = "show-hide.js")
public class ShowHide {
    @Parameter(required = true)
    private boolean state;

    @InjectContainer
    private ClientElement element;

    @Inject
    private ComponentResources resources;

    @Environmental
    private JavaScriptSupport javaScriptSupport;

    void afterRender(){
       Link link = resources.createEventLink("showHide");
       JSONObject spec = new JSONObject();
       spec.put("url", link.toAbsoluteURI());
       spec.put("id", element.getClientId());
       spec.put("status", state);
       javaScriptSupport.addScript("new ShowHide(%s);", spec);
    }

    void onShowHide(boolean state){
       System.out.println("Old state = " + this.state + " new state = " +
state);
       this.state = state;
    }
}

The javascript... (it is not doing anything fancy, just basic
implementation)

ShowHide = Class.create( {
    initialize : function(spec) {
       $(spec.id).status = spec.status;
       Event.observe(spec.id, "click", function() {
          if (!this.status) {
             this.status = true;
          } else {
             this.status = !this.status;
          }
          Tapestry.ajaxRequest(spec.url + "/" + this.status, function() {
             if($(spec.id).status){
                $(spec.id).show();
             }else {
                $(spec.id).hide();
             }
          });
       });
    }
});


This is the component using this mixin as implementation mixin

import net.jkbank.dc.ticket.mixins.ShowHide;

import org.apache.tapestry5.BindingConstants;
import org.apache.tapestry5.ClientElement;
import org.apache.tapestry5.MarkupWriter;
import org.apache.tapestry5.annotations.Environmental;
import org.apache.tapestry5.annotations.Mixin;
import org.apache.tapestry5.annotations.Parameter;
import org.apache.tapestry5.services.javascript.JavaScriptSupport;

public class Div implements ClientElement {
    @Parameter(value = "prop:componentResources.id", defaultPrefix =
BindingConstants.LITERAL)
    private String clientId;

    @SuppressWarnings("unused")
    @Mixin
    private ShowHide showHide;

    private String assignedClientId;

    @Environmental
    private JavaScriptSupport javaScriptSupport;

    void setupRender(){
       assignedClientId = javaScriptSupport.allocateClientId(clientId);
    }

    void beginRender(MarkupWriter writer){
       writer.element("div", "id", getClientId());
    }

    void afterRender(MarkupWriter writer){

       writer.end();
    }

    public String getClientId() {
       return assignedClientId;
    }

}

This is the usage in a template file

<html xmlns:t='http://tapestry.apache.org/schema/tapestry_5_1_0.xsd'>
    <body>
       <t:div t:state='state'>
       This is some text
       </t:div>
    </body>
</html>

public class TestPage {
    @Persist
    @Property
    private boolean state;
}


regards
Taha

On Wed, Apr 6, 2011 at 10:35 PM, LLTYK<ll...@mailinator.com>  wrote:

Last time I did this I used a javascript cookie api.

--
View this message in context:
http://tapestry-users.832.n2.nabble.com/Implementation-mixin-and-persistence-tp6243796p6246820.html
Sent from the Tapestry Users mailing list archive at Nabble.com.

---------------------------------------------------------------------
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