【问题标题】:Dynamically/at runtime set jquery variables from Rails view?从 Rails 视图动态/在运行时设置 jquery 变量?
【发布时间】:2012-08-03 00:57:40
【问题描述】:

我在看 Sharre social mediq jquery 插件http://sharrre.com/# 下面是一个如何使用它的例子。

simple_jquery_social.js 示例:

$('#sharrre').sharrre({
share: {
  googlePlus: true,
   facebook: true,
  twitter: true
 },
url: 'http://sharrre.com'

})

所以在正常的 rails 使用中,我会在我的资产目录中添加以上内容(连同 sharrre jquery lib 的东西),在我的视图中放置一个“div id=sharrre”标签,我就完成了。但是我想在我的 .html.erb 视图模板中创建一个 rails 辅助函数,并动态决定是否显示 google plus,例如。所以我想要类似的东西:

<%= my_helper :googlePlus=>false %>

然后我的环境应该知道上面 jquery 代码中的 googlePlus 变量现在为 false,因此不会显示 googlePlus 按钮。 **重点是通过 Rails 动态控制 jquery 插件中可用的更多选项。但要做到这一点,我需要能够通过 Rails 动态设置 jquery 变量。我意识到上面的例子很简单,因为我可以手动更改 jquery 变量,但是通过 Rails 进行更改,我还可以动态设置 url 参数,这是我希望能够做到的,以便人们可以推荐特定页面.

有什么好的机制可以实现这一点,甚至有可能吗?

【问题讨论】:

    标签: jquery ruby-on-rails ruby-on-rails-3.2 ruby-on-rails-plugins


    【解决方案1】:

    创建一个将 ID、URL 和选项哈希作为参数的帮助程序。

    然后helper生成js和html的混合,输出js代码和需要的div

    def sharrre_tag(div_id, url, options = {})
      div_str = "<div id='#{div_id}'></div>".html_safe
      js_str = "<script>".html_safe
      #Add code to append specific js code and test all option existence and append time to js_str
      js_str += "</script>".html_safe
      return js_str + div_str
    end
    

    在视图中,只需使用正确的参数调用您的助手

    选项 2. 将 JS 与 HTML 分开

    如果您想实现这一点,您可以在单独的 JS 文件中编写一个 JS 代码,该代码将使用类 sharrre_div 获取每个元素。对于每一个,它都会检查是否存在特定的 html 数据属性:data-sharrre-googlePlusdata-sharrre-twitterdata-sharrre-url 等等……这个选项在很大程度上依赖于 JS

    JS : 将其封装在 body onload 事件中

    var sharrre_attr_array = ['data-sharrre-googlePlus', 'data-sharrre-facebook', 'data-sharrre-twitter'];
    $('.sharrre_div').each(function(index){
        var share_hash = {};
            var current_div = $(this);
            $.each(sharrre_attr_array, function(index, element){
    
              if(current_div.attr(element)){
                    share_hash[element.split('data-sharrre-')[1]] = true;
                }
          });
        $(this).sharrre({
              share: share_hash
                ,url: $(this).attr('data-sharrre-url')
            });
    
    });
    

    您的助手所要做的就是创建一个像这样的 div:

    <div class='sharrre_div' data-sharrre-googlePlus='1' data-sharrre-twitter='1' data-sharrre-url='<%=request.url%>' data-sharrre-facebook='1'></div>
    

    应该不会太难写:)

    【讨论】:

    • thank you....one ?: 将 jquery/javascript 动态插入到 head 部分的视图文档中是否被认为是不好的做法?是否应该以某种方式将其分离到 Rails 资产目录中的单独文件中?
    • 当然最好将所有的 JS 放在一个单独的文件中。但是在您的 HTML 文档中包含一些 JS 代码不会杀死。我认为没有人会因为这样做而向你扔鸡蛋:p 这就是说,我将使用另一个选项来编辑我的答案,以便将 JS 与 HTML 分开
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 2020-04-18
    相关资源
    最近更新 更多