Added :function option to PrototypeHelper#observe_field/observe_form that...

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
上级 8b8a30dd
*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]
......
......@@ -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) {"
......
......@@ -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),
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册