【问题标题】:Dynamically Render HTML stored in Model动态渲染存储在模型中的 HTML
【发布时间】:2014-01-22 04:33:00
【问题描述】:

我想将一些 Rails 模型传递到视图中并渲染它们。

例如

在控制器中

@stories = Story.all

在视图中

$('.story-text').html("#{raw @stories[0].story_text}");

但 HTML 字符串包含 "'。因此 HTML 不完全包含在字符串中,并且 Javascript 无法运行。

例如它变成了

$('.story-text').html("<img src="/example.jpg" />");

这会导致错误。

我怎样才能做到这一点?我可以在 Javascript 中使用像 Python 中的三引号吗?

编辑@stories[0].story_text的示例

<p>This is some example text</p><img src="/example.jpg" />

它以text 类型存储在数据库中

【问题讨论】:

  • 请发布您的控制器代码以显示 Story.all 的填充方式。
  • 发布@stories[0].story_text的例子
  • Story.all 通过使用 CKEditor 的表单填充。控制器实际上只是在做@stories = Story.all 我添加了一个示例

标签: javascript html ruby-on-rails haml


【解决方案1】:

不要使用raw,而是使用escape_javascript 转义您的字符串,以便嵌入到javascript 中。它是 j 的别名,所以在您的 Haml 视图中:

$('.story-text').html("#{j @stories[0].story_text}");

导致生成此 javascript:

$('.story-text').html("<p>This is some example text<\/p><img src=\"/example.jpg\" />");

【讨论】:

    【解决方案2】:

    您正在寻找HTMLEntities

    【讨论】:

    • 我不太明白这将如何工作?我会在我的控制器中对 HTML 进行编码/转义,然后在我的视图中使用 Javascript 对其进行解码?解码时引号不会遇到同样的问题吗?您能否添加一个与我的问题相关的示例?
    • 你为什么要用 Javascript 输出?它应该在视图脚本中
    • 你能用视图脚本动态插入 HTML 吗?我想单击一个链接并将 HTML 插入到一个元素中
    • 好的,我明白了。您是通过 AJAX 获取模型数据吗?
    • 不,它们都在渲染时由控制器传递给视图
    猜你喜欢
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 2021-10-14
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多