如何从资产Javascript渲染部分

时间:2012-09-13 14:53:49

标签: javascript jquery ruby-on-rails

我正在尝试从我的资源目录中的javascript中呈现部分内容。我发现我无法在assets目录中调用render方法。但我无法将我的ajax命令移出资产目录。所以现在我的问题是,如何将我的ajax结果传递到我视图中的action.js文件中。

所以我在一个onclick jQuery事件上调用ajax:

/app/javascript/mymodel.js.coffee

$(document).ready ->
---some actions ----
$('.myid').click ->
    ---some action---
    $.ajax 'mypath'
        dataType: 'json'
        success: (result)->
            ---render result in partial on myid-div---

那么如何将我心爱的结果和myid传递给:

/app/views/mymodel/show.js.erb

$('.myid').html("<%= escape_javascript( render( :partial => 'myartial') ) %>");  

要渲染出来吗?

我正在敲打这个很长一段时间,所以我真的很感激一些帮助!

2 个答案:

答案 0 :(得分:0)

$(document).ready ->
---some actions ----
$('.myid').click ->
    ---some action---
    $.ajax 'mypath'
        dataType: 'json'
        params: (pass in what you need, i don't know the exact syntax, just google it)
        success: (result)->
            ---render result in partial on myid-div---
controller

def show
  @result = params[:result]
end

view
show.js.erb
$('#some_id').html('<%= render("mypartial").html_safe %>');

现在可以访问@result

将结果作为AJAX调用中的参数传递给控制器​​方法。然后实例化一个实例变量(例如@result来自参数),这样你的视图就无法使用实例变量。

答案 1 :(得分:0)

你可以调用mymodel控制器的方法来渲染你的部分,但是partial的文件名应该以下划线开头_

在您的示例中,如果您将js放入mymodel控制器,则这些代码render :partial => 'show'可能适用于渲染js,您应该在mymodel视图中将show.js.erb重命名为_show.js.erb。< / p>

要乐观,您应该能够呈现_show.js.erb,并且您可以在终端内看到render _show.js.erb等成功的事情。

但这并不意味着rails正在将js.erb作为javascript处理,因为你的js.erb中存在语法错误(我绝对相信!!)。 所以你也可以改变

$('.myid').html("<%= escape_javascript( render( :partial => 'myartial') ) %>");

$('.myid').html('<%= escape_javascript( render( :partial => 'myartial') ) %>');

查看my questions了解详情。我之前遇到过类似的问题。 它还将向您展示如何发送ajax调用并呈现.js.erb。

:remote => true会向line_items_path发送ajax请求。

根据路由,它将调用create方法,format.js将按惯例呈现create.js.erb。或者,如果存在format.js {render :partial=> "create"}

,我可以使用_create.js.erb呈现js.erb