【问题标题】:jquery ajax render partial with rails viewjquery ajax 渲染部分与rails视图
【发布时间】:2013-10-08 09:16:01
【问题描述】:

我的 jquery ajax 成功为

success: function(data) {
    $('#someId').html(data);
}

我有一个名为 _information.html.erb 的部分文件

如何将我的 ajax 成功响应渲染到 rails 部分视图(information)。

大部分资源都显示这样的内容

$('#holderDiv').empty().append('<ul> <%= j render @comments %> </li>')

但我觉得不舒服。还有什么办法解决。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3


    【解决方案1】:

    更新 下面是一些响应您的 cmets 的更多信息。

    首先请阅读这篇关于 Javascript 的 Rails Guide 以了解更多信息。

    update.js.erb 是你的观点。控制器中带有 format.js 的 respond_to 块不会为您的视图提供 update.html.erb 文件,而是将 update.js.erb(格式化为 javascript 代码)发送回您的 jquery 函数。

    update.js.erb 可以包含纯 javascript。但是,它在转换为 javascript 之前由服务器处理,因此您可以嵌入任何您想要的 ruby​​ 代码。该红宝石代码被转换为javascript。

    如果您使用 chrome 开发人员工具,您可以在 jquery 调用运行后查看“网络”选项卡。您将看到您刚刚进行的 AJAX 调用出现了一个新条目。如果您单击该条目,您将看到返回的 javascript。

    我稍微更新了下面的 update.js.erb 文件,以展示如何将常规 javascript 代码放入 .js.erb 文件中。第一行是javascript。第二行是服务器转换成 javascript 的 ruby​​ 代码。因此,当它到达您的浏览器时,整个 update.js.erb 文件已被转换为 javascript。

    希望对您有所帮助...

    原答案如下:

    选项 1:

    假设您的 jQuery 成功函数与控制器操作的成功完成相关联(我将在示例中使用编辑操作),您将创建一个名为 update.js.erb 的视图,该视图将在成功完成后调用编辑。

    控制器:

    if @user.update_attributes(params[:user])
        respond_to do |format|
            format.html { redirect_to @user, notice: "Successfully updated user." }
            format.js
        end
    else
        # ...
    end
    

    因为这是从 javascript 调用的,并且您在 respond_to 块中有 format.js,所以会自动调用 update.js.erb。

    update.js.erb:

    console.log('see... this is a regular javascript call.');
    <%= render partial: 'information', format: 'js' %>
    

    选项 2

    你包含的sn-p:

    $('#holderDiv').empty().append('<ul> <%= j render @comments %> </li>')
    

    仅适用于 js.erb 文件,其中嵌入的 ruby​​ 代码首先被处理,然后转换为 javascript 代码。这将适用于以下情况:

    控制器:

    def create
        user = User.new(params[:user])
    
        respond_to do |format|
            if @user.save
                @comments = 'some comments to display!'
                format.js
            else
                # ...
            end
        end
    end
    

    create.js.erb:

    $('#holderDiv').empty().append('<%= j render @comments %>')
    

    【讨论】:

    • 在选项 1 中,您能否拆分 controller,js,view 文件的外观,这让我很困惑
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多