I was struck by the fact that there doesn''t seem to be a way to use RJS
to install a callback. For example:
page.visual_effect :slideup, @dom_id, :afterFinish => XXXXX
I want the XXXXX to be more RJS code. I don''t want to have to revert
back to Javascript! But that seems the only solution. What if I have a
bunch of DOM manipulation I have do after I have slide the area up? What
I want is something like:
page.visual_effect :slideup, @dom_id, :afterFinish => page.function {|p|
p.replace_html ''foo'', ''Bar''
p.show ''baz''
}
So I took a stab at implementing Javascript functions via RJS. The below
implementation allows you to define a anonymous function which is
returned as a string. Or you can give the function a name (and possible
some argument names) and you get to define a named function (although I
haven''t really tested this as I really only need anonymous functions
for
callbacks). I welcome feedback and hope this is useful to someone else.
module ActionView
module Helpers
module PrototypeHelper
class JavaScriptGenerator
module GeneratorMethods
# Will create a function using the block as the defination for the
# function. If the function is given a name then it will be recorded
# to the page under the name given. If a name is not given then
# an anonymous function is instead created as a string and returned.
# nothing is recorded to the page. This allows your function to be
# used as a callback such as in :after_finish on a visual_effect.
def function(name=nil, *arg_names, &blk)
# Run block to collect lines
sub_gen = JavaScriptGenerator.new @context, &blk
body = sub_gen.instance_variable_get("@lines") *
";#{$/}\t"
# For line from block execution
line = "function #{name}(#{arg_names.collect(&:to_s).join
'', ''
}) {#{$/}\t#{body}#{$/}}"
name ? record(line) : line
end
end
end
end
end
end
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---