i've been using the aforementioned toggle behavior almost always in
ajaxy pages, and in that case they work fine.
basically that means i add toggle behaviors to components in a page.
when i call an ajax link, toggle works ok because the isTemporary()
method of the behavior returns *true* (otherwise it would attach the
toggle effect contribution to the <header-contribution> part of the
response and it would blow things up - i.e. triggering more than once
a certain toggle effect).
however, i now started using that in pages that use normal links (not
ajax). so when i get the (non ajax) response for the linked page, as
the behavior is temporary, it won't contribute to the header anymore.
thus breaking the effect.
say page1 links to page1b [a new version of page1] when i "diff page1
page1b " i roughly get this:
24,28d23
< <script type="text/javascript"
src="resources/myapp.wicket.components.jquery.JQueryEffectCoreResourceReference/jquery-1.2.6.effects.core.js"></script>
< <script type="text/javascript" ><!--/*--><![CDATA[/*><!--*/
< Wicket.Event.add(window, "domready", function() {
$('#optionalInfoLink58').click(function() {
$('#OptionalInfoArea59').slideToggle(450); }) ;});
< /*-->]]>*/</script>
i.e. the toggle effect won't work in page1b because "function() {
$('#optionalInfoLink58').click(function() {
$('#OptionalInfoArea59').slideToggle(450); }) ;}" is not present in
that page at all. note this doesn't pose a problem if i refresh
certain components via ajax because the original page still contains
this "javascript listener" in the header.
my question: is there a way to tell inside isTemporary() whether the
request was ajax or normal, to return true or false according to that?
other suggestions?
francisco
On Thu, Nov 6, 2008 at 2:45 PM, francisco treacy
<[EMAIL PROTECTED]> wrote:
>> It did.. You could try the isTemporary (return true) on the behavior, it
>
> thanks nino... that *is* the solution, works like a charm
>
> my mistake for not paying attention to the last bits of the javadoc
> ibehavior page :)
>
> "boolean isTemporary()
>
> Specifies whether or not this behavior is temporary. Temporary
> behaviors are removed at the end of request. Such behaviors are useful
> for modifying component rendering only when it renders next. Usecases
> include javascript effects, initial clientside dom setup, etc. "
>
> ... couldn't be more clear...
>
> cheers,
>
> francisco
>
> On Thu, Nov 6, 2008 at 2:22 PM, Nino Saturnino Martinez Vazquez Wael
> <[EMAIL PROTECTED]> wrote:
>> Hi Francisco
>>
>> It did.. You could try the isTemporary (return true) on the behavior, it
>> could mean that it will only add the behavior for that request, but I am not
>> sure.. Or you could try creating a new markupcontainer
>> (listOfCommentsContainer), it'll give it a new id..
>>
>> Or you could stuff in some logic as a ajaxcalldecorator on your link, that
>> will clean it up in pure js...
>>
>> I had some difficulties with exactly this when I did the wicket reaction
>> game.
>>
>> I hope this helpes..
>>
>> francisco treacy wrote:
>>>>
>>>> want to not output the list with wicket's ordinary ajax replace method?
>>>>
>>>
>>> hmmm... wicket's ordinary ajax replace method?
>>>
>>> the basic problem here is:
>>> -when the page is first rendered, the following is added to the dom
>>> (it's the behaviour responsible for this):
>>>
>>> $('#numberOfCommentsLink24').click(function() {
>>> $('#listOfCommentsContainer25').slideToggle(450); })
>>>
>>> -when i click on the "trigger" link (numberOfCommentsLink24) i fire an
>>> ajax request, and add a webmarkupcontainer (listOfCommentsContainer25)
>>> i want to "refresh":
>>>
>>> target.addComponent(listOfCommentsContainer);
>>>
>>> -the ajax response is: *not only* the updated
>>> listOfCommentsContainer25, but *also* an <evaluate> section in the
>>> ajax response, that includes:
>>>
>>> $('#numberOfCommentsLink24').click(function() {
>>> $('#listOfCommentsContainer25').slideToggle(450); })
>>>
>>> (of course, because the behaviour has been added to the
>>> listOfCommentsContainer).
>>>
>>>
>>> -... that means, i now have loaded in the dom *twice* :
>>>
>>> $('#numberOfCommentsLink24').click(function() {
>>> $('#listOfCommentsContainer25').slideToggle(450); })
>>>
>>> so with *one* click on the numberOfCommentsLink24 , i get *two* calls
>>> to $('#listOfCommentsContainer25').slideToggle(450);
>>>
>>> which basically slides up, and immediately down. that is, slide toggle
>>> means it goes up (hides) if it was down (visible), it goes down
>>> (shows) if it was up (hidden).
>>>
>>> i want to avoid this behaviour by stopping the ajax response from
>>> spitting back the javascript code for a second time. perhaps do
>>> something inside the behaviour class?
>>>
>>> hope it clarifies! thanks,
>>>
>>> francisco
>>>
>>>
>>>
>>> On Thu, Nov 6, 2008 at 1:53 PM, Nino Saturnino Martinez Vazquez Wael
>>> <[EMAIL PROTECTED]> wrote:
>>>
>>>>
>>>> Im not sure I understand then..? Could you explain another way? You would
>>>> want to not output the list with wicket's ordinary ajax replace method?
>>>>
>>>> francisco treacy wrote:
>>>>
>>>>>
>>>>> yes, i'm aware of those. but i'd want to 'remove' things from the
>>>>> ajaxRequestTarget rather than append...
>>>>>
>>>>> or, some way of attaching/executing behaviours only once?
>>>>>
>>>>>
>>>>> On Thu, Nov 6, 2008 at 12:58 PM, Nino Saturnino Martinez Vazquez Wael
>>>>> <[EMAIL PROTECTED]> wrote:
>>>>>
>>>>>
>>>>>>
>>>>>> theres a prepend / append js on ajaxRequestTarget, that should work...
>>>>>>
>>>>>> francisco treacy wrote:
>>>>>>
>>>>>>
>>>>>>>
>>>>>>> hi,
>>>>>>>
>>>>>>> we're using a home-grown wrapper for integrating jquery into wicket -
>>>>>>> specifically for jquery effects.
>>>>>>>
>>>>>>> and i'm having some trouble with ajax updates. i'll explain with an
>>>>>>> example:
>>>>>>>
>>>>>>>
>>>>>>> final WebMarkupContainer listOfCommentsContainer = new
>>>>>>> WebMarkupContainer("listOfCommentsContainer");
>>>>>>> listOfCommentsContainer.setOutputMarkupId(true);
>>>>>>> add(listOfCommentsContainer);
>>>>>>>
>>>>>>> AjaxLink<Void> numberOfCommentsLink = new
>>>>>>> AjaxLink<Void>("numberOfCommentsLink") {
>>>>>>> @Override
>>>>>>> public void onClick(AjaxRequestTarget target) {
>>>>>>>
>>>>>>> target.addComponent(listOfCommentsContainer);
>>>>>>> }
>>>>>>> };
>>>>>>>
>>>>>>> listOfCommentsContainer.add(new JQueryEffectBehavior(new
>>>>>>> SlideToggleEffect(), numberOfCommentsLink));
>>>>>>>
>>>>>>> add(numberOfCommentsLink);
>>>>>>>
>>>>>>> this code is basically outputting something like:
>>>>>>>
>>>>>>> <script type="text/javascript" ><!--/*--><![CDATA[/*><!--*/
>>>>>>> Wicket.Event.add(window, "domready", function() {
>>>>>>> $('#numberOfCommentsLink24').click(function() {
>>>>>>> $('#listOfCommentsContainer25').slideToggle(450); }) ;});
>>>>>>> /*-->]]>*/</script>
>>>>>>>
>>>>>>> listOfCommentsContainer25 being the target container to slide,
>>>>>>> numberOfCommentsLink24 the trigger.
>>>>>>>
>>>>>>> this works fine per se. now when i click on numberOfCommentsLink24 ,
>>>>>>> my list is refreshed (added it to the ajaxrequesttarget) and the
>>>>>>> effect behaviour outputting javascript code again...
>>>>>>>
>>>>>>> <ajax-response><header-contribution><![CDATA[<head
>>>>>>> xmlns:wicket="http://wicket.apache.org"><script type="text/javascript"
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> src="resources/hub.app.wicket.components.jquery.JQueryResourceReference/jquery-1.2.6.js"></script>
>>>>>>> <script type="text/javascript"
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> src="resources/hub.app.wicket.components.jquery.JQueryEffectCoreResourceReference/jquery-1.2.6.effects.core.js"></script>
>>>>>>> </head>]]></header-contribution>
>>>>>>> (...)
>>>>>>> <evaluate><![CDATA[$('#numberOfCommentsLink24').click(function() {
>>>>>>> $('#listOfCommentsContainer25').slideToggle(450); })
>>>>>>> ]]></evaluate></ajax-response>
>>>>>>>
>>>>>>> which means that i can visually perceive a very quick slideDown
>>>>>>> followed by a slideUp (this is the normal slideToggle functionality).
>>>>>>>
>>>>>>> is there a way not to include the <evaluate> part? or detect if the
>>>>>>> component has already been rendered in markup to check whether to
>>>>>>> execute the behaviour again?
>>>>>>> perhaps i'm missing some basic point here... any suggestions?
>>>>>>>
>>>>>>> thanks in advance,
>>>>>>>
>>>>>>> francisco
>>>>>>>
>>>>>>> ---------------------------------------------------------------------
>>>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> --
>>>>>> -Wicket for love
>>>>>>
>>>>>> Nino Martinez Wael
>>>>>> Java Specialist @ Jayway DK
>>>>>> http://www.jayway.dk
>>>>>> +45 2936 7684
>>>>>>
>>>>>>
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>>>
>>>>>
>>>>>
>>>>
>>>> --
>>>> -Wicket for love
>>>>
>>>> Nino Martinez Wael
>>>> Java Specialist @ Jayway DK
>>>> http://www.jayway.dk
>>>> +45 2936 7684
>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>>
>>>>
>>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>
>>>
>>
>> --
>> -Wicket for love
>>
>> Nino Martinez Wael
>> Java Specialist @ Jayway DK
>> http://www.jayway.dk
>> +45 2936 7684
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]