现在,我有一些我想在我的应用程序的每个页面上运行的工具提示 JavaScript,但前提是当前用户的模型在我的数据库中将 User.advanced_tooltips 设置为 true。
从概念上讲,让这个 JavaScript 根据数据库中的值有条件地触发的最佳方法是什么?我在让 JavaScript 和 Rails 进行通信时遇到了一些真正的麻烦。
现在,我有一些我想在我的应用程序的每个页面上运行的工具提示 JavaScript,但前提是当前用户的模型在我的数据库中将 User.advanced_tooltips 设置为 true。
从概念上讲,让这个 JavaScript 根据数据库中的值有条件地触发的最佳方法是什么?我在让 JavaScript 和 Rails 进行通信时遇到了一些真正的麻烦。
假设您使用的是 jquery,您可以这样做:
<script type='text/javascript'>
$(document).ready(function() {
var advtt = '<%= @user.advanced_tooltips ? "yes" : "no" %>';
if ( advtt == 'yes')
# ?? add css, or whatever
});
</script>
这假设在呈现包含上述 Javascript 的视图之前在控制器中设置了 @user。
一个干净简单的解决方案是将javascript函数包装在rails逻辑中:
<script type='text/javascript'>
var setupTooltips = function() {
// do something here
}
$(document).ready(function() {
<% if current_user.advanced_tooltips %>
setupTooltips();
<% end %>
});
</script>
这是我最终使用的解决方案(鉴于该项目施加的非常奇怪的限制):
首先,我设置了一个控制器路由来查找当前用户,然后将其 advanced_tooltip 值呈现为文本。
然后,在我的 application.js 中,我使用 $.get 对该路由进行了 AJAX 调用,然后检查结果是否 == "true" 以确定用户是否启用了高级工具提示。
这是一个混乱的解决方案(上面列出的实际上更好),但由于我在完成其他人的项目时遇到了一些非常严格的限制,所以我必须这样做。
仍然给予两个评论投票,因为它们是有效的并且在正常情况下完全可以工作。