bhanson-DoiYfCJD+p7by3iVrkZq2A@public.gmane.org
2009-Jun-03 16:39 UTC
Appending a Rails Partial with jQuery
Im not sure which group to post in, so i thought i''d try both. Any
Rails peeps that use jQuery? Im having a problem.
I have followed Ryan Bates Screencast about inserting a partial with
jQuery and currently have it working in my app. What i really would
like is to keep all my code in my application.js file vs a bunch of
files all over my view folders.
This is what i have in my application.js
$(document).ready(function() {
$(''#add_option'').click(function() {
$(this).addPollOption();
});
});
jQuery.fn.addPollOption = function() {
$("#poll_options").append(''#{escape_javascript
render(:partial =>
"topics/poll_option", :object => TopicOption.new)}'');
};
i have tried it with the #{} and the <%= %> both give the same result.
Instead of getting the partial to populate the div, it simply adds the
text to the div below the 2 existing form fields.
#{escape_javascript render(:partial => "topics/poll_option",
:object
=> TopicOption.new)}
Any thoughts?
I''ve not watched the screencast, but I would assume that if
you''ve put
that code in application.js it''s not going to work.
the #{} and <%= %> tags are escapes for the code to be interpreted on
the server by ruby. application.js is interpreted on the client by
javascript. I suspect the code snippet needs to go between some
<script> tags in a ruby template.
application.js is a place to park your custom javascript routines. Therefore, the document ready call that you have there does not make sense:> $(document).ready(function() { > $(''#add_option'').click(function() { > $(this).addPollOption(); > });Put call in your "layout" file(s), e.g., application.html.erb for example. You can even add it to the "erb" files where you need this functionality. Also, you need to follow Ryan''s screencast more closely. You will notice that he has the javascript code to append the partial in create.js.erb file. That is extremely important. It is quite common to have Javascript "snippets" in various files and have multiple document ready calls in place. It is a bit different than what we are used to as Ruby or Ruby on Rails programmers but it is best to get used to it. It is better than Obstrusive Javascript :)
It can also be handy to have a main document ready block in the layout
file:
<% javascript_tag do -%>
$(document.ready(function() {
<%= yield :document_ready %>
});
<% end -%>
Then you can drop page-specific JS into it with content_for. You''ll
also be in an ERB context, so you''ll have a lot more luck getting your
example above (using <%= %>) to work.
I find this a lot more straightforward than stuffing every bit of JS
into application.js, as it puts the code closer to the HTML it''s
designed to manipulate.
--Matt jones
On Jun 4, 8:21 am, Bharat
<bcrupa...-/E1597aS9LQAvxtiuMwx3w@public.gmane.org>
wrote:> application.js is a place to park your custom javascript routines.
> Therefore, the document ready call that you have there does not make
> sense:
>
> > $(document).ready(function() {
> > $(''#add_option'').click(function() {
> > $(this).addPollOption();
> > });
>
> Put call in your "layout" file(s), e.g., application.html.erb for
> example. You can even add it to the "erb" files where you need
this
> functionality.
>
> Also, you need to follow Ryan''s screencast more closely. You will
> notice that he has the javascript code to append the partial in
> create.js.erb file. That is extremely important.
>
> It is quite common to have Javascript "snippets" in various files
and
> have multiple document ready calls in place. It is a bit different
> than what we are used to as Ruby or Ruby on Rails programmers but it
> is best to get used to it. It is better than Obstrusive Javascript :)
Reasonably Related Threads
- help on plotting series with different x-axis values on a graph with one x-axis
- [PATCH node-image] add livecd-iso-to-iscsi script to support iscsi root booting setup
- rake migrate HANGS
- [Virtio-for-kvm] [PATCH 4/7] userspace virtio
- [Virtio-for-kvm] [PATCH 4/7] userspace virtio