4

我已经使用 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>

但是,我不知道如何将任何类型的参数传递给这个文件。它甚至可能不起作用,我这样做可能是完全错误的。就像我说的,还在学习。无论如何,感谢您的帮助!

4

2 回答 2

4

我的语法可能有点偏离,但我会这样做:

HTML

 <div data-id="<%= @article.id %>" class="article"><%= @article.title %></div>

JS

这可能有助于解释您的 js 将如何工作: http: //guides.rubyonrails.org/asset_pipeline.html。我通常做的是为特定视图创建一个包含我的所有绑定(和其他方法)的对象。然后在视图的底部某处,我将在文档就绪块中创建对象的实例并绑定 DOM。您的所有 js 都将通过清单文件 (application.js) 添加到布局中的任何位置。

应用程序/资产/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);
    });
  });
});

应用程序/资产/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" %>

导轨控制器

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
于 2012-06-28T05:18:19.130 回答
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 (在我的示例中为咖啡)中,您可以使用http://js2coffee.org/article.js.coffee将咖啡转换为 js

$('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)

如果您有错误,请通过电子邮件将我发送到 gmail.com 的 antiqe

于 2012-06-28T09:05:09.630 回答