2

Ruby on Rails 存在一些问题,即使花费数小时尝试也无法解决。我希望你们能帮助我。这四个问题在行首标有 Q1-Q4。

我认为我需要不止一次的元素。出于这个原因,lib 文件夹中应该有一个单独的模块(所以我也可以在其他项目中使用它)。

我需要什么: - 我可以从任何视图自动调用的辅助方法。- 因为它需要更多的 html 东西,所以我想使用一个 html 文件,我在 helper-method 中呈现它。- 将参数传递给 javascript 文件。- 如果使用元素,则必须包含 JavaScript 文件 - 如果使用元素,则必须包含 CSS 文件

由于不太容易理解我的意思,我再用一个简单的例子来解释一下(这只是一个例子,所以不要过多考虑它的含义):Helper for create a combo box with a view- helper 或者使用 javascript 方法。显然,我需要 (html) - 一个放置在下拉框 (js) 顶部的文本输入字段 - 一个在文本框中显示下拉框的选定项目的函数。(css) - 位于下拉列表前面的文本框的样式。(settings) - 一个初始化元素的设置文件,以便我可以在任何地方自动使用它。

我想象的文件夹结构:

    • 组合框
      • combo_box_helper.rb
      • _combo_box.html.erb
      • 组合框.js
      • 组合框.css

在 combo_box-helper.rb 我有 2 方法:

  • 组合框字段(下拉内容)

该方法使用部分返回一个组合框。数组条目在下拉框中可用。

  • combo_box_js(drop_down_content)

当使用 javascript 创建组合框时,必须调用该方法。要仅对组合框进行一次更改,还应使用部分创建元素并将其传递给 javascript。

这里出现了第一个问题:

Q1:在任何方法的第一次调用(并且仅在第一次调用)时,它必须包含 js 和 css 文件。这样做的常见方法是什么?

Q2:如何渲染位于 lib 文件夹中而不是 app/view 文件夹中的部分?

Q3:给javascript传参数的常用方法是什么?

我的第一次尝试:

module ComboBoxHelper
    def combo_box_field(drop_down_content)
        output = check_first_call

        output + render(:partial => 'combo_box',  :locals => {:content => drop_down_content})
    end

    def
        output = check_first_call

        output + "<div class='hidden' data-combobox = '" +  render(:partial => 'combo_box',  :locals => {:content => drop_down_content}) + "'></div>"
    end

    def check_first_call
        if @already_called
            ""
        else
            @already_called = true
            javascript_include_tag("combo_box.js") + stylesheet_link_tag("combo_box.css")
        end
    end
end

问题:

  • 渲染方法不起作用(它在应用程序/视图中搜索部分)
  • check_first_call 的调用很丑陋。特别是当它返回一个字符串时。
  • javascript 和 css 的包含不起作用(文件不在资产管道中)

.html.erb 和 .css 文件的内容是不言自明的。javascript 文件中有趣的部分是我尝试访问 Ruby on Rails 传递的参数:

$('div.hidden[data-combobox]').data("combobox")

如果这些问题都解决了,只有一件事很重要:如何正确初始化模块,所以我到处自动使用它。

我的第一次尝试:我使用该代码在 config/initializers/init_combo_box 文件夹中创建一个文件:

require_dependency 'combo_box/combo_box_helper'

ActiveSupport.on_load(:action_view) do
    include ComboBoxHelper
end

Q4 : 这是常见的方式吗?我是否需要添加一些内容来解决上述问题之一(例如,将 js- 和 css 文件添加到资产管道)?

谢谢你的帮助。

4

0 回答 0