渲染部分资产

csc*_*sch 7 ruby-on-rails ruby-on-rails-3.1 asset-pipeline

我正在使用Ruby on Rails 3.1,我想知道如何在javascript资产中渲染部分内容.

我的目标是:

# in /app/assets/javascript/cart.js.coffee.erb
$('a.add_sth').click -> $('.random_container').append('<%= render partial: 'way/to/partial' %>')
Run Code Online (Sandbox Code Playgroud)

这会导致NoMethodError:

undefined method `render' for #<#<Class:0x007fc54584c6e8>:0x007fc5474cd470>
Run Code Online (Sandbox Code Playgroud)

如果我写,<%= 2+3 %>它工作正常,顺便说一句.

我认为问题是资产管道独立于默认的ActionView,这就是为什么render()在那里未知.无论如何,有没有办法让部分内容呈现?

lin*_*_er 8

坏消息,渲染不可用Look:GitHub上的同样问题


tot*_*rio 5

请记住,资产适用于静态数据,如CSS,JS或不会动态更改其内容的图像,因此可以更好地缓存和/或导出到CDN.

由于允许您使用ruby代码运行ERB,因此它应始终返回相同的值(因为它仅在编译资产时执行).

这就是为什么我猜渲染在资产内部不可用(尽管它可以正确地用于渲染静态数据).

这里简单的解决方案:将您的JS文件移动到视图,在那里您将能够使用任何视图助手.