如何在Rails中动态更新html并使用帮助程序?

时间:2014-09-05 04:22:10

标签: javascript jquery ruby-on-rails ruby-on-rails-4

我想在Rails中使用jQuery更新div的html。我想使用帮手。

例如,假设我试图将图像放入div中。这是我在js文件中做的事情:

// Update the html content of #div
// I am using a helper, img_tag

$("#div").html("<%= img_tag('some_image.png') %><br> + 'some message'"

但帮助程序不会创建img标记。相反,它在div中显示为字符串。

i.e.
// Content of the div as a result:

<%= img_tag('some_image.png') %><br> some message

当我手动输入html标签时,它可以正常工作。

i.e.
$("#div").html("<img src="assets/images/some_image.png" alt="img"><br>
 + 'some message'"

但我想知道在这种情况下如何使用帮助器,因为我也在尝试使用其他帮助器,例如link_to。

2 个答案:

答案 0 :(得分:1)

需要考虑的几个问题:


<强> JS

首先,您需要考虑您尝试使用的JS。

根据定义,标准JS无法使用rails helpers 。原因是JS是一种“前端”/“客户端”语言,只有在页面加载后才能使用。实际上,JS倾向于只使用"DOM" (Document Object Model)

  

JavaScript(JS;英语发音:/'jɑvəˌskrɪpt/)是动态的   计算机编程语言。它最常用作一部分   Web浏览器,其实现允许客户端脚本   与用户交互,控制浏览器,进行通信   异步,并更改显示的文档内容。   它也被用于服务器端网络编程(带有   Node.js),游戏开发以及桌面和移动设备的创建   应用

底线是 Javascript只会加载到应用程序的客户端部分。由于Ruby / Rails是服务器方面,与PHP相似,因此您的JS将无法在传统流程中处理Rails帮助程序。

解决这个问题的唯一方法是以某种方式将JS与Rails的加载机制结合起来。这可以使用ajax(从服务器拉出来),或使用Rails渲染你的js(不确定如何)


<强>修正

我相信您可以使用preprocessing with Rails JS,这意味着,就像erb一样,您可以在javascript文件中调用Rails助手:

  

同样适用于JavaScript文件 -   app / assets / javascripts / projects.js.coffee.erb作为ERB处理,   然后是CoffeeScript,并作为JavaScript。

     

请记住这些预处理器的顺序很重要。对于   例如,如果您调用了JavaScript文件   app / assets / javascripts / projects.js.erb.coffee然后就可以了   首先使用CoffeeScript解释器处理,但不会   理解ERB因此会遇到问题。

这意味着如果你想做你正在做的事情,你需要追加预处理器以确保它可以调用Rails助手:

#app/assets/javascripts/application.js.erb
var loaded = function(){
   $("#div").html("<%=j image_tag('some_image.png') %><br> + 'some message'"
};
$(document).on("page:load ready", loaded);

答案 1 :(得分:0)

您的JavaScript文件必须具有.erb扩展名才能使用嵌入式ruby。