Rails:HAML上的button_tag与常规%button

时间:2018-11-08 20:23:30

标签: ruby-on-rails haml

我发现有两种方法可以在Ruby on Rails上创建按钮。我们正在使用HAML进行模板制作。

第一种方式:

= button_tag 'Submit', type: 'submit', class: 'btn btn-primary primary-button'

第二种方式:

%button.btn.btn-primary.primary-button{ type: 'submit' } Submit

两种方法都可以将其转换为HTML。

我应该选择什么?使用“ /”或“任何”有什么利弊?这只是偏好问题吗?

2 个答案:

答案 0 :(得分:2)

您可以选择任何方式。没有优缺点。就像退出irb控制台一样:您可以输入exitquit,无论如何都会退出。只是一个偏好问题。

对于我来说,我更喜欢在元素类为静态时使用第二种方法:

%button.btn.btn-primary.primary-button{ type: 'submit' } Submit

以及动态计算的第一种方式:

= button_tag 'Submit', type: 'submit', class: "btn btn-primary #{extra_class}"

(当然,如果您拥有自己的帮助器方法button_tag会有所不同。但是我认为您不需要重新定义内置帮助器。)

答案 1 :(得分:1)

这实际上取决于您的需求。如果仅使用帮助程序来呈现基本的HTML按钮标记,则仅使用HTML标记甚至甚至不需要HAML都可能更快。我想这是在某种情况下可能有利弊的情况。

%button.btn.btn-primary.primary-button{ type: 'submit' } Submit
<button class="btn btn-primary primary-button" type="subimt">Submit</button>

由于Rails甚至不必将HAML代码转换为HTML,因此速度会更快。


但是,button_tag帮助器将在已经具有form_for / tag / with helper的表单中使用,并被其他text_field / text_field_tag,text_area / text_area_tag等帮助器包围,而仅使用button_tag帮助器会更有意义为了保持一致。

您可以针对text_field_tag询问有关%input {type:“ text”}的相同问题,但是决定使用帮助器会更容易,因为它可以非常轻松地处理字段名称,以方便使用Rails:您可以具有前缀,后缀,可处理数组等,对于复杂和嵌套的形式,可能会很麻烦。仅使用HAML意味着您必须手动设置名称,因此您将希望帮助者更快地开发表单。

此外,帮助程序还有更多选项可以与rails-ujs一起很好地使用常见的html属性:confirm,disable_with,remote等。您当然可以复制由这些选项创建的相同数据属性,但是保持一致性如果您已经使用了其他助手,那么他们将是一个专业人士,您无需记住remote:true选项是否为data: {remote: true}或其他任何内容。

我个人始终使用Rails表单帮助程序,因为我将它们用于表单和输入,因此即使知道它们也很容易使用HAML编写,也很自然地也使用commit_tag,button_tag等帮助程序。

对于我能想到的最后一个专业人士,您可以拥有自己的button_tag帮助器。如果您希望所有按钮都属于“ btn btn-primary”类,则可以覆盖button_tag帮助器,而无需更改任何视图。


作为一个弊病,您当然有速度,使用帮助程序会增加带有逻辑的额外步骤。我认为这不是一个真正的现实问题,因为这并不是一个沉重的逻辑,如果您不愿意挤每个毫秒,您甚至可能只想编写纯HTML甚至不是HAML。

您还拥有学习曲线的缺点。每个人都知道HTML,并且在大多数情况下将HTML转换为HAML很简单。将HTML标签转换为helper标签选项需要您阅读helper的文档,它有一些警告(例如button_tag的button。等)。我也不认为这是一个很大的问题,一切都有学习曲线,我认为专业人士值得。