我已经和Rails合作了一段时间了。我找到了一些东西,但我正在努力解决这个问题。我有一系列博客文章,只用他们的标题呈现。在控制器中,对象看起来像:
@articles
在我的主页面上,我通过局部渲染它,只显示标题。
<%= render 'shared/article_view', :collection => @articles %>
这为我提供了主页上的文章列表。当我点击标题时,我想在单独的div
中打开它。我有一个表格。但是,我不确定如何将参数传递给被调用的javascript。我假设我可以将id
传递给我的view_article.js.erb
文件,可以从那里调用
@article = Article.find_by_id(id)
然后
<p><%= @article.text %></p>
但是,我不知道如何将任何类型的参数传递给此文件。它可能甚至不起作用,我这样做可能完全错误。正如我所说,还在学习。无论如何,谢谢你的帮助!
答案 0 :(得分:3)
我的语法可能有些偏差,但这就是我要做的事情:
<强> HTML 强>
<div data-id="<%= @article.id %>" class="article"><%= @article.title %></div>
<强> JS 强>
这可能有助于解释你的js如何运作:http://guides.rubyonrails.org/asset_pipeline.html。我通常做的是创建一个对象,其中包含特定视图的所有绑定(和其他方法)。然后在视图中,在底部的某个地方,我将在文档就绪块中创建对象的实例并绑定DOM。所有js都将由清单文件(application.js)添加到您在布局中的任何位置。
应用程序/资产/ Javascript角/ 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);
});
});
});
应用程序/资产/ Javascript角/ 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控制器
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
答案 1 :(得分:0)
class ArticleController
def show
@article = Article.find(params[:id]
respond_to do |format|
format.json {render :json => @article.text } #now when u try to get host/articles.json/[id of article] you will get json with article object
end
end
article.js.erb中的(我的例子中的coffe) 你可以使用http://js2coffee.org/将coffe转换为js article.js.coffee
$('document').ready ->
$('.article').live 'click', ->
$.ajax
url: 'articles/' + $(this).attr('id') #getting article#show with id of article
complete: (data) ->
article = JSON.parse(data.responseText)
$('p').empty()
$('p').append(article.text)
像这样的事情
如果您有错误,请发送电子邮件至gq的antiqe