Hi All, I posted earlier about a problem I was having with the various remote view methods escaping all the javascript in my callbacks. I was quickly informed that that''s just what they do, and offered some workarounds. However, in actually working with this, I''m finding that this one little thing is forcing me to write some REALLY ugly code. Where I thought I could specify an updater with some fairly sophisticated view post-processing in my view, I am forced to write procedural code in my controllers. If I wanted to write code that ugly, I would have stuck with PHP. There''s got to be a way to stop e.g. link_to_remote from escaping the javascript specified in the callbacks. This behavior dramtically reduces the elegance of these otherwise beautiful methods. I''ve done some digging through the docs and even some of the code, but nothing really jumped out at me. Can someone more familiar with these helpers please give me some suggestions? Thanks much, -Mike. -- Posted via http://www.ruby-forum.com/.
Can you post your code that you''re having a problem with? why can''t you have your callbacks call javascript methods and in the methods do all the complex javascript stuff instead of putting all the complex javascript stuff in the callback parameter? On 4/19/06, Mike Evron <evronm@dtcinc.net> wrote:> > > Hi All, > > I posted earlier about a problem I was having with the various remote > view methods escaping all the javascript in my callbacks. I was quickly > informed that that''s just what they do, and offered some workarounds. > > However, in actually working with this, I''m finding that this one little > thing is forcing me to write some REALLY ugly code. Where I thought I > could specify an updater with some fairly sophisticated view > post-processing in my view, I am forced to write procedural code in my > controllers. > > If I wanted to write code that ugly, I would have stuck with PHP. > > There''s got to be a way to stop e.g. link_to_remote from escaping the > javascript specified in the callbacks. This behavior dramtically > reduces the elegance of these otherwise beautiful methods. > > I''ve done some digging through the docs and even some of the code, but > nothing really jumped out at me. Can someone more familiar with these > helpers please give me some suggestions? > > Thanks much, > > -Mike. > > -- > Posted via http://www.ruby-forum.com/. > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails >-------------- next part -------------- An HTML attachment was scrubbed... URL: http://wrath.rubyonrails.org/pipermail/rails/attachments/20060420/985ca9f7/attachment.html
OK, here''s the simplest example of why what I''m asking for is useful: <% @foo=''bar''> <%= link_to_remote :url=>{:parial => ''foo''}, :update => ''bar'', :oncomplete => "new Effect.Highlight(''#{@foo}'')" %> What I''m trying to do is send the contents of ruby variables to the javascript code as literals. It seems like a perfectly natural thing to do, but the quote escaping makes it impossible, yielding: new Effect.Highlight(&squot;bar&squote;) This works surprisingly frequently considering what it looks like, but is unreliable, and just plain wrong.> Can you post your code that you''re having a problem with? why can''t you > have > your callbacks call javascript methods and in the methods do all the > complex > javascript stuff instead of putting all the complex javascript stuff in > the > callback parameter?-- Posted via http://www.ruby-forum.com/.
Update: Oops, the above code actually works correctly. However, if you change it to: <% @foo=''bar''> <%= link_to_remote :url=>{:parial => ''foo''}, :update => ''bar'', :oncomplete => update_page do |page| page.alert("''#{@foo}''") end %> you will get the escaped quotes. Shouldn''t this be considered a bug? It certainly limits the usefulness of update_page. I''ve continued my digging through the code, but still can''t figure out where this is happening. Any help would be greatly appreciated. Thanks much, -Mike. -- Posted via http://www.ruby-forum.com/.
OK, I couldn''t wait for you guys, so I found the problem myself :). What''s happening is that the tag_options method in tag_helper.rb runs all tag options through html_escape. I think of this as a bug which can be fixed by simply taking out the html_escape call in tag_options, so it looks like this: def tag_options(options) cleaned_options = convert_booleans(options.stringify_keys.reject {|key, value| value.nil?}) '' '' + cleaned_options.map {|key, value| %(#{key}="#{value.to_s}")}.sort * '' '' unless cleaned_options.empty? end After all, it''s easy enough to put h() around your callback values if you want it. However, doing so might break some existing code, so I''d like peoples opinions on alternatives before I submit a patch. I also started a ticket on Trac, which I will update with this info. Any input from more experienced Ruby/Rails folks would be greatly appreciated. Thanks, -Mike. -- Posted via http://www.ruby-forum.com/.