我想在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。
答案 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。