javascript block 中的 ruby​​ [slim 模板]

标签 ruby slim-lang

有一种方法可以将 ruby​​ 条件放入 javascript block 中吗?即

javascript:
  var config = {
      common_value_1 : 1, 
      common_value_2 : 2 
  };
  - if my_value === true # this must be a ruby condition
    config.custom_true_value_1 = "1" ;
    config.custom_true_value_2 = "#{my_value}" ;
  - else
    config.custom_false_value_1 = "1" ;
    config.custom_false_value_2 = "#{my_value}" ;

或者是否有其他解决此问题的方法?因为我可以使用它的丑陋方式:

javascript:
    var config = {
      common_value_1 : 1, 
      common_value_2 : 2 
    };
- if my_value === true # this must be a ruby condition
  javascript:
    config.custom_true_value_1 = "1" ;
    config.custom_true_value_2 = "#{my_value}" ;
- else
  javascript:
    config.custom_false_value_1 = "1" ;
    config.custom_false_value_2 = "#{my_value}" ;

但我不喜欢它,因为如果配置在 if 和 else 之间具有共同的值,那么我将复制我的代码并且会更大并且难以维护。

更新了更好的示例

最佳答案

您可以使用类似于字符串插值的样式。请参见下面的示例。

javascript:
  var config = { 
    custom: "#{my_value ? 'truthy' : 'falsy'}",
    current_user: #{raw current_user.to_json}
  };

** 下面更新 **

如果你想要更高级的配置,我建议创建一个类,例如

class ClientConfig
  attr_accessor :foo, :bar

  # .. code

  def to_json
    { foo: foo, bar: bar }.to_json
  end
end

# in view file
javascript: 
  var config = ClientConfig.new.to_json

否则你也有机会创建一个 ruby​​ partial 我在下面创建了一个示例,它可能不那么漂亮但我工作。

# template_path/_config.html.ruby
def configuration
  { foo: "Hello", bar: "World" }
end

def july_special
  { june_key: "It's June" }
end

def month_name
  Date.today.strftime("%B")
end

config = month_name == 'July' ? configuration.merge(july_special) : configuration

content_tag :script, config.to_json.html_safe

# viewfile
= render 'template_path/config'

所以我的观点是,有多种方法可以做到这一点,您应该尝试找到最适合您和您的应用程序的方法。在我的例子中,如果我只需要一个或两个值,我会使用我的第一个示例(在更新之前),否则我会选择 ClientConfig 类。

关于javascript block 中的 ruby​​ [slim 模板],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17794403/

相关文章:

ruby - String#gsub 保持大小写?

ruby - 自动加载常量时检测到循环依赖

ruby - 模块中 class_eval 和 instance_eval 的区别

html - Ruby Slim - 如何使用 Rails 助手或变量定义元素的类?

ruby-on-rails - 如何在 slim (rails) 中生成新的 View 文件?

ruby-on-rails - 在 slim 的标签内嵌套文本

ruby-on-rails - 在 Rails 4 的模型/类中定义自定义方法

ruby-on-rails - 在 Rails 中,如何将 2009-12-01 之类的日期显示为 2009 年 12 月 1 日星期一

html - 带有 CSS 的水平滚动单行图库

forms - Slim 中的文本区域 "Required field"