Hi All!
I struggeld with something similar for some days maybe it helps you to
see how I solved my problem and maybe you can reuse
something...Basically I tried to find a work around for the autocomplete
mixin limitations, which just accepts string as return type, thus
rendering complex values is nearly impossible.
The Bind mixin provides several parameters: zone, callback, context.
To pass the current content of a input field back to Tapestry I used:
... t:mixins="jquery/bind" bind.event="change" bind.eventType="keyup"
bind.zone="schoolSearchResultZone"
bind.callback="function
(event,ui,url) { x = $('#schoolTextField').val(); url.addContext(x); }" ...
"bind.context" just passes the initial value back, which is useable to
pass static state back, but I needed the latest value from the input
field. Using the code above I get a callback when the user types a
character in the input field (field assigned with id "schoolTextField").
"url.addContext" replaces "COntEXt" (used internally by bind) by the
value of my input field. Therefore a java function "public Object
onChange(final String searchText)" is called. Be careful: in case the
input field is empty the "dynamic context" misses and the required
function signature is: "public Object onChange()".
I decided to have two java methods but you can use JavaScript to avoid
calls when no input was made, too.
My method
public Object onChange(final String searchText)
{
// do something with searchText...
return schoolSearchResultZone.getBody();
}
returns a zone and allows me to render whatever I need in which form I
want. So it works like "autocomplete" but fits more the entire page
design :-)
The zone itself is defined in my page by
@InjectCompenent private Zone _schoolSearchResultZone;
and the corresponding tml fragment is:
<div t:type="zone" id="schoolSearchResultZone"
t:id="schoolSearchResultZone">
... loop whatever ...
</div>
Be careful, the context (searchText) is not encoded properly yet, so
german umlauts will fail. But I'll figure this out next...
Jens
Am 22.05.13 09:47, schrieb Emmanuel DEMEY:
but I think the value of your sent will not be sent. I have just pushed a
small patch : https://github.com/got5/tapestry5-jquery/issues/295
Can you test it ?
Manu
2013/5/22 Barry Books <trs...@gmail.com>
You have to pass in the context
<t:textfield class="${selector:this}" t:id="textZone"
t:mixins="jquery/bind" t:event="change" t:eventType="change" t:zone="zone"
t:context="myContext" />
On Tue, May 21, 2013 at 2:23 PM, Boris Horvat <horvat.z.bo...@gmail.com
wrote:
Well spoke too soon
<t:zone t:id="zone" id="zone">
<div id="status">${textZone}</div>
</t:zone>
<t:form>
<t:textfield class="${selector:this}" t:id="textZone"
t:mixins="jquery/bind" t:event="change" t:eventType="change"
t:zone="zone"
/>
</t:form>
------
@Property
@Persist
private String textZone;
@InjectComponent
private Zone zone;
@OnEvent(value = "change")
public Object change(String value) {
textZone = value;
return zone.getBody();
}
This doesn't work as the context is not passed. In other words if I
remove
the parameter the method is hit if not I get the exception that there is
no
method to process the request. So I guess I am half say there.
Barry did you by any chance had a test where you pass the parameter.
PS Looking into the javascript url generated by the tapestry5-jquery
http://tapestry5-jquery.com/mixins/docsbind:slidechange/CoNtExT and mine
http://localhost:8080/healthstatus:change I think that for some reason I
am
missing the parameter that should tell it to insert context. So a bug
maybe?
Cheers
On Tue, May 21, 2013 at 9:01 PM, Boris Horvat <horvat.z.bo...@gmail.com
wrote:
Nah that is not the problem.
When I have changed from onchange to change it triggered the ajax
request.
So I guess I should remove 'on' from my events.
Thanks for help your example shad light on this :D
Cheers
On Tue, May 21, 2013 at 8:55 PM, Jan Fryblik <jan.fryb...@ebrothers.cz
wrote:
I'm just guessing, but try to put there also attribute id. Its often
worked for me.
<t:zone t:id="zoneSlideChange" id="zoneSlideChange">
<div id="status">${textZone}</div>
</t:zone>
<t:form>
<t:textfield t:id="textZone" t:mixins="jquery/bind"
event="onchange" eventType="onfocus" zone="testzone"/>
</t:form>
BR,
Jan
On Tue, 21 May 2013 20:49:56 +0200, Boris Horvat <
horvat.z.bo...@gmail.com> wrote:
I have tried with prefix t: and it has nothing to do with that (it is
not
really mandatory as far as I know). But I stilled tried it. The zone
name
is also correct. The thing is that when I try to debug it the even it
never
triggered, so it cant be the zone related problem that is for sure.
On Tue, May 21, 2013 at 8:31 PM, Dmitry Gusev <
dmitry.gu...@gmail.com
wrote:
Is it zone="testzone" vs t:zone="testzone" ?
the same for these attributes: event="onchange" eventType="onfocus"
looks like you forget to add "t:" prefix
Also make sure you've specified correct zone client id, try the same
as
in
Barry's example, using ${zoneSlideChange.clientId}.
On Tue, May 21, 2013 at 9:48 PM, Boris Horvat <
horvat.z.bo...@gmail.com
wrote:
Yea your example works, but mine does not and I cant see any
difference.
Do
you have any idea?
On Tue, May 21, 2013 at 4:34 AM, Barry Books <trs...@gmail.com>
wrote:
Here is my old test case
<t:zone t:id="clickZone" visible="false">
click OK
</t:zone>
<div t:id="clickHere" t:type="any"
t:mixins="jquery/bind"
t:eventType="click" t:event="click"
t:zone="${clickzone.clientid}"
>click test</div>
@InjectComponent
@Property
private org.apache.tapestry5.corelib.**components.Zone
clickZone;
@Inject
private Logger logger;
@OnEvent(value="click")
Object onClick() {
return clickZone.getBody();
}
On Mon, May 20, 2013 at 11:58 AM, Boris Horvat <
horvat.z.bo...@gmail.com
wrote:
Did anyone used this?
I cant use the example in the tapestry5-jquery as it complains
that
slider
is not a mixin, so I guess that the example is old as slider
is
now a
component. Still I have tried to use
<t:zone t:id="zoneSlideChange">
<div id="status">${textZone}</div>
</t:zone>
<t:form>
<t:textfield t:id="textZone" t:mixins="jquery/bind"
event="onchange" eventType="onfocus"
zone="testzone"/>
</t:form>
----------------
@Property
@Persist
private String textZone;
@InjectComponent
private Zone zone;
@OnEvent(value = "onchange")
public Object onchange(String value) {
textZone = "The SlideChange event was triggered.";
return zone.getBody();
}
Does anyone know where is the problem?
Cheers
Boris
--
Sincerely
*Boris Horvat*
--
Dmitry Gusev
AnjLab Team
http://anjlab.com
--
Sincerely
*Boris Horvat*
--
Sincerely
*Boris Horvat*
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org