提交 d2adec43 编写于 作者: N Nicholas Seckar

Ensure assigns are copied to the template when using render :update. Closes #3620.

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3497 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
上级 f8bcfa6e
*SVN* *SVN*
* Ensure that the instance variables are copied to the template when performing render :update. [Nicholas Seckar]
* Add the ability to call JavaScriptGenerator methods from helpers called in update blocks. [Sam Stephenson] Example: * Add the ability to call JavaScriptGenerator methods from helpers called in update blocks. [Sam Stephenson] Example:
module ApplicationHelper module ApplicationHelper
def update_time def update_time
......
...@@ -642,6 +642,9 @@ def render(options = nil, deprecated_status = nil, &block) #:doc: ...@@ -642,6 +642,9 @@ def render(options = nil, deprecated_status = nil, &block) #:doc:
end end
elsif options[:update] elsif options[:update]
add_variables_to_assigns
@template.send :evaluate_assigns
generator = ActionView::Helpers::PrototypeHelper::JavaScriptGenerator.new(@template, &block) generator = ActionView::Helpers::PrototypeHelper::JavaScriptGenerator.new(@template, &block)
render_javascript(generator.to_s) render_javascript(generator.to_s)
......
...@@ -194,6 +194,15 @@ def update_page ...@@ -194,6 +194,15 @@ def update_page
page.visual_effect :highlight, 'balance' page.visual_effect :highlight, 'balance'
end end
end end
def update_page_with_instance_variables
@money = '$37,000,000.00'
@div_id = 'balance'
render :update do |page|
page.replace_html @div_id, @money
page.visual_effect :highlight, @div_id
end
end
def action_talk_to_layout def action_talk_to_layout
# Action template sets variable that's picked up by layout # Action template sets variable that's picked up by layout
...@@ -223,7 +232,7 @@ def determine_layout ...@@ -223,7 +232,7 @@ def determine_layout
"render_with_explicit_template", "render_with_explicit_template",
"render_js_with_explicit_template", "render_js_with_explicit_template",
"render_js_with_explicit_action_template", "render_js_with_explicit_action_template",
"delete_with_js", "update_page" "delete_with_js", "update_page", "update_page_with_instance_variables"
"layouts/standard" "layouts/standard"
when "builder_layout_test" when "builder_layout_test"
...@@ -494,6 +503,14 @@ def test_update_page ...@@ -494,6 +503,14 @@ def test_update_page
assert_equal 2, @response.body.split($/).length assert_equal 2, @response.body.split($/).length
end end
def test_update_page_with_instance_variables
get :update_page_with_instance_variables
assert_template nil
assert_equal 'text/javascript', @response.headers['Content-Type']
assert_match /balance/, @response.body
assert_match /\$37/, @response.body
end
def test_yield_content_for def test_yield_content_for
get :yield_content_for get :yield_content_for
assert_equal "<title>Putting stuff in the title!</title>\n\nGreat stuff!\n", @response.body assert_equal "<title>Putting stuff in the title!</title>\n\nGreat stuff!\n", @response.body
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册