Dan*_*ada 9 javascript ruby ajax ruby-on-rails rjs
我正在关注使用Rails第4版的Pragmatic Agile Web Development,但是我正在使用Rails 3.2.2而不是3.0.5,如本书所推荐:
~$ ruby -v
ruby 1.9.3p125 (2012-02-16) [i686-linux]
~$ rails -v
Rails 3.2.2
Run Code Online (Sandbox Code Playgroud)
我在包括AJAX重绘购物车而不重新加载页面时陷入困境.这是line_items_controller.rb中的create动作:
def create
@cart = current_cart
product = Product.find(params[:product_id])
@line_item = @cart.add_product(product.id)
respond_to do |format|
if @line_item.save
format.html { redirect_to(store_url) }
format.js
format.json { render json: @line_item, status: :created, location: @line_item }
else
format.html { render action: "new" }
format.json { render json: @line_item.errors, status: :unprocessable_entity }
end
end
end
Run Code Online (Sandbox Code Playgroud)
这是我的RJS文件create.js.rjs(在app/views/line_items下):
page.alert('NO PROBLEM HERE')
page.replace_html('cart', render(@cart))
Run Code Online (Sandbox Code Playgroud)
但是,当我单击启动此操作的按钮时:
<%= button_to 'Add to Cart', line_items_path(:product_id => product), :remote => true %>
Run Code Online (Sandbox Code Playgroud)
我在开发日志中收到以下错误:
ActionView::MissingTemplate (Missing template line_items/create, application/create with {:locale=>[:en], :formats=>[:js, :html], :handlers=>[:erb, :builder, :coffee]}. Searched in:
* "/home/me/src_rails/depot/app/views"
):
app/controllers/line_items_controller.rb:47:in `create'
Run Code Online (Sandbox Code Playgroud)
如果我将create.js.rjs的文件名更改为create.js.erb,则问题已得到纠正:
Rendered line_items/create.js.erb (0.4ms)
Run Code Online (Sandbox Code Playgroud)
但在视图中没有任何事情发生....甚至没有警报.我错过了什么?file.js.erb和file.js.rjs有什么区别?
tsh*_*rif 18
它似乎rjs已被删除为 Rails 3.1 的默认值.你可以通过安装prototype-railsgem 来恢复它,但我认为你应该只使用jQuery,这是新的默认值.
至于你的代码,它不起作用的原因是它rjs被解释为一个模板.js.erb,这可能只是产生无效的JavaScript(你应该在浏览器的JavaScript控制台中看到错误).rjs用于page为您设置变量的模板,您可以使用它编写Ruby代码来操作页面.在.js.erb模板中,它更像您的.html.erb视图.你编写实际的JavaScript,使用<% %>标签嵌入Ruby .所以代码create.js.erb应该看起来像这样:
alert('NO PROBLEM HERE');
$('#cart').html("<%= escape_javascript(render(@cart)) %>");
Run Code Online (Sandbox Code Playgroud)
在rails> = 3.1中,不再有jquery-rjs.但是你可以在这里使用CoffeeScript
line_items/create.js.coffee:
alert 'NO PROBLEM HERE'
$('#cart').html '<%= j render(@cart) %>'
Run Code Online (Sandbox Code Playgroud)
或类似的东西.
| 归档时间: |
|
| 查看次数: |
5646 次 |
| 最近记录: |