【问题标题】:automatically load a javascript function after loading page加载页面后自动加载javascript函数
【发布时间】:2014-03-21 17:57:30
【问题描述】:

我是 Rails 新手,现在还不太了解资产管道……

我想让一个

views/product/product.js 

自动触发

views/product/index.html.erb 

出于 DRY 原因渲染。

资产管道中是否存在在加载任何或部分 model.erb 文件后调用 model.js 文件的位置?

我知道如何手动操作,并删除了一个

app/assets/javascripts/product.js

但是我必须在新的显示中调用 doSomethingAfterPageload() 方法。删除等 如果这也适用于局部,那就更好了。

【问题讨论】:

    标签: javascript ruby-on-rails asset-pipeline actionview


    【解决方案1】:

    普通配置下的资产管道只是(简化解释)将获取清单 (application.js) 中引用的所有 js 文件,并创建单个、缩小、混淆的文件用于生产。在开发中,如果您在页面中包含清单(应该是布局),您最终会得到清单包含的每个资产的 js 脚本包含标签。

    一种常见的模式是在布局中放置yield :javascript 块,然后在单个视图中,调用content_for :javascript do 块内的javascript 函数。

    Best way to add page specific javascript in a Rails 3 app?

    更好的方法是根据控制器和动作有条件地执行 js。以下是它的工作原理:http://viget.com/inspire/extending-paul-irishs-comprehensive-dom-ready-execution

    【讨论】:

      【解决方案2】:

      IMO,如果要在产品模型的每个视图中调用这个js方法,你可以为产品定义一个布局,并在布局文件中调用该方法。

      【讨论】:

        【解决方案3】:

        取自这里:Asset Pipeline - Rails guides

        如果您添加 app/assets/javascripts/<controller>.js,它将可用于该特定控制器。

        所以如果你添加到app/assets/javascripts/product.js:

        $(document).ready ->
          alert "page has loaded!"
        

        它将在该控制器的每个视图中执行,例如 indexedit

        希望这会有所帮助:)

        【讨论】:

        • 谢谢!我之前尝试过,但它也会在所有其他控制器视图中执行……
        猜你喜欢
        • 1970-01-01
        • 2018-05-26
        • 2018-08-23
        • 2012-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多