Browse files

Added :function option to PrototypeHelper#observe_field/observe_form …

…that allows you to call a function instead of submitting an ajax call as the trigger (closes #4268) [jonathan@daikini.com]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3926 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
1 parent 8b8a30d commit 7bfca7e717aca77ab8dcc629c55abe71f2e5e4bd @dhh dhh committed Mar 18, 2006
View
2 actionpack/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* Added :function option to PrototypeHelper#observe_field/observe_form that allows you to call a function instead of submitting an ajax call as the trigger #4268 [jonathan@daikini.com]
+
* Make Mime::Type.parse consider q values (if any) [Jamis Buck]
* XML-formatted requests are typecast according to "type" attributes for :xml_simple [Jamis Buck]
View
6 actionpack/lib/action_view/helpers/prototype_helper.rb
@@ -315,9 +315,11 @@ def remote_function(options)
# Observes the field with the DOM ID specified by +field_id+ and makes
# an Ajax call when its contents have changed.
#
- # Required +options+ are:
+ # Required +options+ are either of:
# <tt>:url</tt>:: +url_for+-style options for the action to call
# when the field has changed.
+ # <tt>:function</tt>:: Instead of making a remote call to a URL, you
+ # can specify a function to be called instead.
#
# Additional options are:
# <tt>:frequency</tt>:: The frequency (in seconds) at which changes to
@@ -702,7 +704,7 @@ def build_observer(klass, name, options = {})
options[:with] ||= 'value' if options[:update]
end
- callback = remote_function(options)
+ callback = options[:function] || remote_function(options)
javascript = "new #{klass}('#{name}', "
javascript << "#{options[:frequency]}, " if options[:frequency]
javascript << "function(element, value) {"
View
10 actionpack/test/template/prototype_helper_test.rb
@@ -108,10 +108,20 @@ def test_observe_field
observe_field("glass", :frequency => 5.minutes, :url => { :action => "reorder_if_empty" })
end
+ def test_observe_field_using_function_for_callback
+ assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nnew Form.Element.Observer('glass', 300, function(element, value) {alert('Element changed')})\n//]]>\n</script>),
+ observe_field("glass", :frequency => 5.minutes, :function => "alert('Element changed')")
+ end
+
def test_observe_form
assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nnew Form.Observer('cart', 2, function(element, value) {new Ajax.Request('http://www.example.com/cart_changed', {asynchronous:true, evalScripts:true})})\n//]]>\n</script>),
observe_form("cart", :frequency => 2, :url => { :action => "cart_changed" })
end
+
+ def test_observe_form_using_function_for_callback
+ assert_dom_equal %(<script type=\"text/javascript\">\n//<![CDATA[\nnew Form.Observer('cart', 2, function(element, value) {alert('Form changed')})\n//]]>\n</script>),
+ observe_form("cart", :frequency => 2, :function => "alert('Form changed')")
+ end
def test_update_element_function
assert_equal %($('myelement').innerHTML = 'blub';\n),

0 comments on commit 7bfca7e

Please sign in to comment.