我使用 Rails 已经有一段时间了。我想通了一些东西,但我正在努力解决这个问题。我有一系列博客文章,只显示了它们的标题。在 Controller 中,对象看起来很简单:
@articles
在我的主页上,我通过局部渲染它并只显示标题。
<%= render 'shared/article_view', :collection => @articles %>
这为我提供了主页上的文章列表。当我点击标题时,我想在单独的 div
中打开它。我有这个与表格一起工作。但是,我不确定如何将参数传递给被调用的 javascript。我假设我可以将 id
传递到我的 view_article.js.erb
文件,然后可以从那里调用
@article = Article.find_by_id(id)
然后
<p><%= @article.text %></p>
但是,我不知道如何将任何类型的参数传递给这个文件。它甚至可能不起作用,我这样做可能是完全错误的。正如我所说,仍在学习。无论如何,感谢您的帮助!
最佳答案
我的语法可能有点不对劲,但我会这样做:
HTML
<div data-id="<%= @article.id %>" class="article"><%= @article.title %></div>
JS
这可能有助于解释您的 js 将如何工作:http://guides.rubyonrails.org/asset_pipeline.html .我通常做的是创建一个对象,其中包含我对特定 View 的所有绑定(bind)(和其他方法)。然后在 View 底部的某处,我将在文档就绪 block 中创建对象的实例并绑定(bind) DOM。您所有的 js 都将通过 list 文件 (application.js) 添加到布局中的任何位置。
app/assets/javascripts/users.js
// Wraps your binding in a document ready function
// Runs as soon as the DOM is loaded
$(function() {
$('.article').on('click', function() {
var id = $(this).attr('data-id');
$.get('articles/' + id, function(data) {
// Handle the result
$('.article-window').html(data);
});
});
});
app/assets/javascripts/application.js
// This directive will include all your js files in the javascripts folder
//= jquery
//= require_tree .
app/views/layouts/application.html.erb(或布局所在的任何位置)
// This adds all your js to the page
<%= javascript_include_tag "application" %>
Rails Controller
class ArticlesController < ApplicationController
respond_to :html, :json
def show
@article = Article.find(params[:id]
respond_with do |format|
format.json { render :json => @article }
end
end
end
关于javascript - 将 Rails 对象传递给 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11238084/