这是我的第一个StackOverflow问题,所以我希望我问对了!
我有一个Ruby on Rails Web应用程序,在我们的javascript文件中,我有以下CoffeeScript代码,它可以检测id ="提交"按下,然后滚动到出现的第一个错误,如果有的话(在我们的表单中使用"提交"按钮):
@scroll_to_error = ->
document.getElementById('submit').onclick = ->
if $('.alert-danger:visible:first').length > 0
$('html, body').animate { scrollTop: $('.alert-danger:visible:first').offset().top - 220 }, '1000'
return

我在config文件夹中的application.rb文件中包含了这个文件,所以可以在views部分的任何HTML文件中调用它~~但是,我想知道是否有办法使它可以在我拥有的所有观点中都有所称呼。有没有办法做到这一点?
希望这是足够的信息 - 抱歉,我无法提供更多的代码片段,因为我正在为一家公司编写代码(因此"我们的")。
答案 0 :(得分:1)
尝试这样的事情?
dest.Range("E" & destRow) = Int(src.Range("F" & i).VALUE2)
dest.Range("E" & destRow).numberformat = "mm/dd/yyyy"
以及设置了scrollToError = ->
$('*[data-scroll-to-error="true"]').click ->
alertElement = $('.alert-danger:visible:first')
if alertElement.length > 0
$('html, body').animate {
scrollTop: alertElement.offset().top - 220
}, '1000'
# Run with turbolinks.
$(document).on 'page:change', scrollToError
属性的提交按钮。
data-scroll-to-error
我发现你的陈述令人困惑:
我将该文件包含在配置中的application.rb文件中 文件夹,以便可以在视图部分的任何HTML文件中调用
假设这是一个标准的Rails项目,你应该在<input type="submit" data-scroll-to-error="true" />
(清单文件)中包含包含Coffeescript代码的文件,因为assets/javascripts/application.js
是布局中所需的JS文件(isn& #39;是吗?: - /),此代码将在您的所有视图上执行。我不知道application.js
如何参与其中。
更新:添加更多信息。
如果您不确定如何使用config/application.rb
文件(清单文件),请花时间浏览Rails&#39;关于它的官方文件(特别是关于清单的部分)。
http://guides.rubyonrails.org/asset_pipeline.html#manifest-files-and-directives
在您的情况下,您需要修改application.js
以包含:
application.js
基本上,您列出了要加载的所有资产文件以及使用布局的所有页面(可能是...
//= require error
...
),然后仅提及布局的清单文件。这样,Rails可以连接和缩小以生成单个资产文件。默认的application.html.erb
清单文件会自动进行预编译 - 因此您无需手动将新资产添加到预编译列表中。
我将选择器编写为application.
的原因是个人偏好 - 代码对我来说更好。如果你确定ID *[data-scroll-to-error="true"]
是(并且将来)仅应用于需要滚动到错误的元素,那么将第一个选择器更改为{{1} }
答案 1 :(得分:0)
执行此操作的一种方法是在函数中公开代码,以便可以从视图中调用它。
Coffeescript档案:
window.SomeNamespace ||= {}
window.SomeNamespace.scroll_to_error = ->
document.getElementById('submit').onclick = ->
if $('.alert-danger:visible:first').length > 0
$('html, body').animate { scrollTop: $('.alert-danger:visible:first').offset().top - 220 }, '1000'
查看文件(假设您使用的是erb)
<script>
$(function(){
window.SomeNamespace.scroll_to_error()
});
</script>
然而,更好的方法是分离视图代码和javascript代码。 elementaljs为Rails提供了一个小的Javascript行为库,我非常喜欢它。你可以&#34;附加&#34;通过data
属性对特定html元素的javascript行为,并且库为您完成上述工作。