【问题标题】:Render Grape API to string from a view将 Grape API 渲染为视图中的字符串
【发布时间】:2013-07-24 13:41:36
【问题描述】:

我在 Rails 4 应用程序中设置了基于 Grape 的 API。我想将其中一个 API 调用生成的 json 呈现到 inline 标记 中的视图中 - 特别是使 JSON 数据可用于 angularjs 视图以避免(JSON API)在页面加载后调用服务器。

任何想法如何将 Grape API 呈现为字符串

/app/api/api.rb

class API < Grape::API
  version 'v1', using: :path
  format :json
  get '/dashboard' do
    ...
  end
end

views/dashboard/index.html.erb

<script>   
  <%= render some-way-to-render-to-text('/api/v1/dashboard.json') %>
</script>

我可以使用 get http 请求来渲染它,但我希望避免 http 调用的开销。我宁愿直接调用 API 类。

【问题讨论】:

  • 请解释你为什么要这样做,听起来有点奇怪。
  • 优化。仪表板页面是使用 angular.js 构建的 - 它所做的第一件事是从服务器请求 dashboard.json 并使用返回的数据生成/呈现视图。但这会导致一个额外的服务器请求并减慢页面呈现速度。我想在页面被渲染并使用 ng-init 时内联渲染 json 数据,因此 angular.js 不必调用dashboard.json。同样,这是一项改善首页加载体验的优化。

标签: ruby-on-rails grape-api render-to-string


【解决方案1】:

您的 erb 文件在发送到客户端之前会呈现为原始 html。您的 api 调用是在此之后进行的,因此无法接收 http 响应并在 ruby​​ 中对其进行处理,因为此时所有的 ruby​​ 已被翻译成 html。

您想要做的是以角度处理它。从那里您可以使用 jquery 将其插入 DOM。

在 Angular 中,您可以在服务中执行以下操作:

$http.get(....).success(//insert into DOM here)

【讨论】:

    猜你喜欢
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多