Hi Ignacio,

It works and is much cleaner than the hacks I had to use to get my app to work. Now I have to re-factor my code to clean it up, but I feel much more comfortable with your solution. I visited issue 122 and left a comment, but I couldn't find any way that I could close it.

There is one residual issue with the <a> tag that I will post separately later today.

Thanks for all your help,

Don

On 09/28/2014 08:28 AM, Ignacio Huerta wrote:
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