【问题标题】:Call Rails helper in every view impliedly as first argument在每个视图中调用 Rails 助手作为第一个参数
【发布时间】:2014-09-06 18:43:38
【问题描述】:

我有一个使用 ajaxify_rails Gem 的 Rail 4 应用程序。所以只有我的内容被加载,而不是整个页面。现在我已经定义了一个辅助方法,我想在每个视图中调用它作为第一条语句。我目前的方法是在每个视图中都明确地这样做,但这是很多重复的代码。所以我有很多观点都以

开头
= rails_helper_method
...

有没有办法在每个视图中隐含地做到这一点,还是我必须一遍又一遍地调用它?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 ajaxify


    【解决方案1】:

    这就是layouts 的用途。 只需在布局中调用您的辅助方法,因为您的视图将使用该布局,因此您的辅助方法也会被调用。在您的布局文件中,您可以这样做:

    %body
      = rails_helper_method
      = yield
    

    更新:

    如果你看ajaxify_rails repo,你可以在application_controller 中调用它的ajaxify_extra_content 方法,然后将它绑定到ajaxify 事件。你可以这样做:

    def ajaxify_extra_content
      ... your extra html ...
    end
    

    然后像这样绑定它:

    $(document).on 'ajaxify:content_inserted', ->
      $('#id_of_some_container_in_view').html $('#ajaxify_content #id_of_some_container_in_view').html()
    

    你也可以像这样直接调用你的助手:

    def ajaxify_extra_content
      view_context.your_helper
    end
    

    PS 我还没有测试过,但这应该适合你

    【讨论】:

    • 在普通的 Rails 应用程序中这可以工作,但是由于 ajaxify_rails,当用户点击链接时布局不会被渲染,所以在渲染新内容时不会调用 helper 方法。
    • 谢谢,这可行,我还找到了另一种可行的解决方案,Gem rails-ajax 可以根据一个请求更新具有不同部分的多个容器,因此您可以获得相同的结果。跨度>
    猜你喜欢
    • 2019-08-21
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多