Hi Don,

I have investigated a bit more, and I think I found a neat solution for
your example:

https://github.com/iox/demo_ajax_button_problem/commit/6817c5226bbdd874d6808e5e0f72ba3d72ffd4a4

I have removed the JS responses, and instead rely on Hobo's default
partial system. As we are using a custom controller action, we need to
tell "hobo_ajax_response" the correct page_path where it has to find the
partial. I'm gonna create another issue to see if this can be
automatised in the future :).

If you feel this solution is good enough, please close
https://github.com/Hobo/hobo/issues/122.

Warm regards,
Ignacio

El 28/09/14 a las #4, Ignacio Huerta escribió:
> Hi Don,
> 
> I'm glad you found a workaround. I have reproduced the issue with your
> repository and indeed it seems we have one or two bugs:
> 
> - After an Ajax update "Rails style", it looks like the data-rapid
> events are not set or something similar.
> - I tried to rewrite the code with an Ajax update "Hobo style" (with
> parts), but I get an error the part is not being found.
> 
> This needs more time, so I'm creating an issue in Github. I'll come back
> to this.
> 
> Warm regards,
> Ignacio
> 
> El 27/09/14 a las #4, Donald Ziesig escribió:
>> Hi All!
>>
>> This turns out to be two separate issues.  The <a> tag in dryml does not
>> work consistently (except to produce an HTML request when called from
>> within a partial).  I replaced it with a new tag <ajax-button>.  This is
>> not quite finished (it does not check for missing but required
>> attributes), but it works whether it is called from an normal page or a
>> partial (and always produces a JS request):
>>
>> <def tag="ajax-button" attrs="label, image, subsite, action, title,
>> imgclass">
>> <%=  url = object_url(this, :method => :put, :subsite => subsite);
>> url = url + '/' + action if action;
>> link_to(url, :remote => true,:method => :put ) do
>>   image_tag(image, class: imgclass, title: title);
>> end %>
>> </def>
>>
>> Invoked with:
>>
>> <ajax-button action="up" image="up-arrow.png" title="Move UP"
>> imgclass="arrow-button" if="&can_edit?"/>
>>
>> Note the method => :put.  This was another area where the <a> tag has a
>> bug.  The only way I could get the <a> tag buttons to be active at all
>> was to use :get in the <a> tag and in the associatd routes.  With the
>> <ajax-button> tag, :put works in the tag and the routes.
>>
>> The second issue was what appears to be a rails bug.  I was updating
>> records in a belongs_to model but the changes were not propagating to
>> the associated has_many model.  The fix was easy, but finding it was
>> not.  All I needed was to call reload on the association after changing
>> the associated data.  I was using a pattern that I used in Rails 2 (but
>> not since) which worked then without needing the call to reload.  I got
>> to the point that I posted a question to StackOverflow, then answered my
>> own question after a lot of googling.
>>
>> Don Ziesig
>>
>> On 09/25/2014 09:44 PM, Donald Ziesig wrote:
>>> Hi Ignacio,
>>>
>>> I extracted the failing code and put it into github.  Check
>>> [email protected]:dziesig/demo_ajax_button_problem.git
>>>
>>> The code is partially completed, I got to this point when I hit the
>>> problem.  Open the agenda, the show page illustrates the problem. 
>>> Click on any one of the Up Arrow buttons (except the top one),  the
>>> behaviour is correct.  Click it again and see the problem.  The Down
>>> Arrow buttons have a slightly different problem of their own, but I
>>> think once I get the Up working properly the Down will follow quickly.
>>>
>>> The files up.html.erb and down.html.erb are there only because I got
>>> "template missing" errors on the second button click without them.
>>>
>>> Meanwhile, I am going to try to figure out why the second and later
>>> button clicks show as HTML rather than JS.
>>>
>>> Thanks,
>>>
>>> Don
>>>
>>> P.S.  In the source application, I ran into the failure in rendering
>>> partials from dryml on the second try that I described a long while
>>> ago.  The somewhat convoluted code in this demo is part of my attempt
>>> to work around that issue.
>>>
>>>
>>>
>>>
>>>
>>> On 09/25/2014 05:28 PM, Ignacio Huerta wrote:
>>>> Sorry Don, I could not follow your example :S. It's indeed a weird
>>>> bug. I suggest:
>>>>
>>>> * If you want to use Dryml and Ajax updates, it might be better to
>>>> use the <div part="something">...<a updates="#something"... syntax
>>>> * For updates with Jquery and Rails style, it might work easier a
>>>> small partial in ERB/Haml
>>>> * Still, it would be interesting to reproduce your issue, so if you
>>>> can provide some dummy code to reproduce, I'll be glad to play around
>>>>
>>>> Warm regards,
>>>> Ignacio
>>>>
>>>> On Thu, Sep 25, 2014 at 10:35 PM, Donald Ziesig <[email protected]
>>>> <mailto:[email protected]>> wrote:
>>>>
>>>>     Hi Ignacio!
>>>>
>>>>     The html_safe almost works.  (I tried that but put it in the
>>>>     wrong place :-[ ).
>>>>
>>>>     Now the only problem is much stranger.
>>>>
>>>>     When I click the button once, it generates a JS response and the
>>>>     page renders correctly with appropriate data changes.  The second
>>>>     and all subsequejt times I click it generates an HTML response
>>>>     and the page renders without the data outside the <def> and with
>>>>     no styling.  The data that is displayed is correct, it just looks
>>>>     funny =-O .  I did have to add an html template to get this far,
>>>>     without it I just get a missing template exception.  I didn't
>>>>     think I would have needed the html and I would really like to get
>>>>     the buttons to always generate JS like the first time.
>>>>
>>>>     It must have something to do with context because the html for
>>>>     the button stays the same in firebug, it just works without ajax
>>>>     on all clicks but the first.
>>>>
>>>>     Any Ideas?
>>>>
>>>>     Don
>>>>
>>>>
>>>>     On 09/25/2014 12:06 PM, Ignacio Huerta wrote:
>>>>
>>>>         Hi Don,
>>>>
>>>>         Your HTML is being escaped. You need something like this:
>>>>
>>>>         $('#agenda_items').html('<%=j render(:partial =>
>>>>         'agendas/table_plus',
>>>>         :locals => { :this => @this }).html_safe %>');
>>>>
>>>>         You can also use "raw(html_string)" I think.
>>>>
>>>>         Please say if this doesn't help :)
>>>>
>>>>         Regards,
>>>>         Ignacio
>>>>
>>>>         El 25/09/14 a las #4, Donald Ziesig escribió:
>>>>
>>>>             Another strange one:
>>>>
>>>>             I am trying to render a partial (dryml) from javascript. 
>>>>             The javascript
>>>>             is a one-liner:
>>>>
>>>>             $('#agenda_items').html('<%=j render :partial =>
>>>>             'agendas/table_plus',
>>>>             :locals => { :this => @this } %>');
>>>>
>>>>             The partial is also rather trivial:
>>>>
>>>>                  <table-plus with="&this.agenda_items"
>>>>             fields="position, this">
>>>>             <controls:><controls-with-up-dn/></controls:>
>>>>                  </table-plus>
>>>>
>>>>             Unfortunately, in the <div id="agenda_items" > ... </div>
>>>>
>>>>             Instead of the table-plus and all its entries being
>>>>             rendered, the html
>>>>             (correct as near as I can tell) is rendered as text:
>>>>
>>>>             <div class="table-plus"><div class="header"><div
>>>>             class="search"> <form
>>>>             action="" class="search-form" method="get"><div
>>>>             class="hidden-fields"></div> <span
>>>>             class="label">Search</span> <input
>>>>             class="search" name="search" type="search"><input
>>>>             class="button
>>>>             submit-button search-button search-submit" type="submit"
>>>>             value="Go"></form> </div></div> <table> <thead><tr
>>>>             class="field-heading-row"> <th class="position-heading"> <a
>>>>             class="column-sort position-heading-link"
>>>>             href="/agenda_items/4-approval-of-last-month-s-minutes/ ****
>>>>
>>>>             The code in the partial renders correctly when invoked
>>>>             directly.
>>>>
>>>>             What am I missing?
>>>>
>>>>             Thanks,
>>>>
>>>>             Don Ziesig
>>>>
>>>>
>>>>     -- 
>>>>     You received this message because you are subscribed to the
>>>>     Google Groups "Hobo Users" group.
>>>>     To unsubscribe from this group and stop receiving emails from it,
>>>>     send an email to [email protected]
>>>>     <mailto:hobousers%[email protected]>.
>>>>     To post to this group, send email to [email protected]
>>>>     <mailto:[email protected]>.
>>>>     Visit this group at http://groups.google.com/group/hobousers.
>>>>     For more options, visit https://groups.google.com/d/optout.
>>>>
>>>>
>>>>
>>>>
>>>> -- 
>>>> Ignacio Huerta Arteche
>>>> http://www.ihuerta.net
>>>> 0034 645 70 77 35
>>>> -- 
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Hobo Users" group.
>>>> To unsubscribe from this group and stop receiving emails from it,
>>>> send an email to [email protected]
>>>> <mailto:[email protected]>.
>>>> To post to this group, send email to [email protected]
>>>> <mailto:[email protected]>.
>>>> Visit this group at http://groups.google.com/group/hobousers.
>>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>> -- 
>>> You received this message because you are subscribed to the Google
>>> Groups "Hobo Users" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected]
>>> <mailto:[email protected]>.
>>> To post to this group, send email to [email protected]
>>> <mailto:[email protected]>.
>>> Visit this group at http://groups.google.com/group/hobousers.
>>> For more options, visit https://groups.google.com/d/optout.
>>
>> -- 
>> You received this message because you are subscribed to the Google
>> Groups "Hobo Users" group.
>> To unsubscribe from this group and stop receiving emails from it, send
>> an email to [email protected]
>> <mailto:[email protected]>.
>> To post to this group, send email to [email protected]
>> <mailto:[email protected]>.
>> Visit this group at http://groups.google.com/group/hobousers.
>> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups "Hobo 
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/hobousers.
For more options, visit https://groups.google.com/d/optout.

Reply via email to