【问题标题】:What is the best approach to manage multi page JavaScript in Rails application?在 Rails 应用程序中管理多页 JavaScript 的最佳方法是什么?
【发布时间】:2017-11-24 13:45:48
【问题描述】:

我正在构建一个包含数百个 html 页面的 Rails 应用程序,并且每个页面上都需要唯一的 javascript,包括 js 库。 Rails,因为我更熟悉它,也用于其他后端目的。

您可以举一个简单的代码转换(例如,XML 到 JSON)在线工具的例子来了解一下。这里将xml数据转换为json的代码是用javascript写在HTML页面上的。就我而言,我想制作 100 种这样的工具(即 csv 到 json、html 到 pdf 等),其中每个工具都独立于其他工具。我没有将这些数据中的任何数据存储在数据库中,而只存储将使用工具的用户信息。所以基本上所有页面都将从单个控制器呈现。

请为此建议我更好的方法,或者我应该继续在每个 HTML 页面上编写 javascript。谢谢。

【问题讨论】:

  • 我不确定是否了解您的应用程序结构。当您说“页面”时,它是控制器视图吗?
  • 我已经编辑了问题,请检查。
  • 从技术上讲,rails 将仅用于存储用户数据,并且这些“页面”将仅由单个控制器呈现。它们与数据库无关
  • HTML 到 PDF 在客户端上使用 javascript 正确完成并不是一件容易的事。你想要实现的目标听起来有点乐观。应用程序具有结构和多个控制器和模型,以避免如此繁重的客户端页面。为什么不在服务器和客户端之间更平等地平衡?此外,您所描述的似乎不适合 Rails 经典 MVC 结构
  • 是的,我知道这有点奇怪。对于繁重的任务,我将使用第三方 API 来平衡服务器端的负载。但是对于简单的格式和文本转换,我想坚持使用 javascript 来减轻服务器的负担。来到 Rails,该部分将用于在站点注册并选择更多功能的用户,只有该部分将在 Rails 中处理。否则,它会继续作为几个“使用和抛出”工具的集合运行。

标签: javascript ruby-on-rails web-applications frameworks


【解决方案1】:

我不确定我是否理解你的理想。但是,我认为您可以尝试将您的 javascript 代码保存到数据库中。 您使用控制器从数据库中读取 javascript 代码并将其呈现为 javascript 文件。

例子:

# routes.rb
get '/js/:file_name.js', to: 'javascripts#show'

# model
Javascript( id: :interget, name: :string, content: :text )

# controller
class JavascriptsController < ApplicationController
   def show
      js = Javascript.find_by_name(params[:file_name])
      respond_to do |format|
         format.js { js.content if js.present? }
      end       
   end
end

我试图简单地描述我的理想。请再次检查,确定它可以按您的意愿工作。

希望有帮助。

【讨论】:

  • 感谢回复 这里的单页本身就是一个完整的单页应用程序,需要大量的javascript代码和依赖库。我不认为将它们存储在数据库中是一个好方法。实际上,我什至不想为此使用数据库。我已经用细节编辑了这个问题。请检查...
【解决方案2】:

对于您上面的情况,我想建议使用 coffeescript OOP 方法,下面是您的要求的详细信息和一些代码

  • 我建议你用coffee with class方法,然后用事件turbolinks:load检查每个页面
  • 您可以查看哪个页面的名称为 控制器和方法例如 $(".purchase_requests.new")[0] 表示控制器是 purchase_requests 和方法 new
  • 另外,我建议您阅读 Brandon hilkert 博客以获取以下额外参考:the link

带有检查每个页面加载的示例咖啡脚本

class App.PurchaseRequest

  renderYourJavascript: ->
    console.log "purchase request js"

$(document).on "turbolinks:load", ->
  if $(".purchase_requests.new")[0] || $(".purchase_requests.edit")[0]  
    purchase_request = new App.PurchaseRequest
    purchase_request.renderYourJavascript() 

【讨论】:

    猜你喜欢
    • 2011-06-05
    • 2014-09-30
    • 1970-01-01
    • 2012-03-20
    • 2011-02-10
    • 1970-01-01
    • 2013-05-20
    • 2011-12-10
    • 1970-01-01
    相关资源
    最近更新 更多