首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ruby内部javascript块[瘦模板]

ruby内部javascript块[瘦模板]
EN

Stack Overflow用户
提问于 2013-07-22 18:07:22
回答 3查看 33.4K关注 0票数 36

有没有办法将红宝石条件放入javascript块?即

代码语言:javascript
复制
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
复制
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和否则之间有共同的值,那么我会复制我的代码,并且会更大,也很难维护。

更新了更好的示例

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-22 18:18:51

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

代码语言:javascript
复制
javascript:
  var config = { 
    custom: "#{my_value ? 'truthy' : 'falsy'}",
    current_user: #{raw current_user.to_json}
  };

**以下最新情况**

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

代码语言:javascript
复制
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

否则,你也有机会创造一个红宝石部分,我创造了一个例子,下面谁可能不是那么漂亮,但我工作。

代码语言:javascript
复制
# 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

票数 37
EN

Stack Overflow用户

发布于 2014-09-16 09:51:08

在纯Slim中,您没有rawhtml_safe。在这些情况下,只需使用双花括号作为文档化的这里

代码语言:javascript
复制
javascript:
  var data = #{{ JSON.dump([{x: 1, y:2}]) }};
票数 24
EN

Stack Overflow用户

发布于 2016-12-09 18:15:37

你有两个选择:

1.使用ruby部分

对于复杂的代码来说,这个场景更好。

我有一个ruby对象,我想要创建一个JSON。因此,在我的瘦文件中,我将创建一个ruby部分:

代码语言:javascript
复制
ruby:

  myObject = @object.to_json.html_safe

注意html_safe:重要的是不要避开双引号。

然后,您可以在myObject内部使用javascript部分:

代码语言:javascript
复制
javascript:

  var data = #{myObject};

2.使用双花括号

对于简单的情况,在javascript部分中使用双花括号,如@fphilipe答案中所述:

代码语言:javascript
复制
javascript:

  var data = #{{@object.to_json}};
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17794403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档