Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将一系列键替换为使用javascript显示的字符串?_Javascript_Ruby_Haml - Fatal编程技术网

如何将一系列键替换为使用javascript显示的字符串?

如何将一系列键替换为使用javascript显示的字符串?,javascript,ruby,haml,Javascript,Ruby,Haml,我有一组模板,其中包含由%%key%%表示的关键短语(如果有问题,可以使用不同的分隔符)。在给出的代码中,模板的名称显示在选择器中,选中后,它们的值当前将移动到文本区域中显示。在显示它们之前,我希望浏览一下模板,并用与该键关联的值替换每个键 我已尝试使用template.gsub'键''值',template.gsub!'键“value”,甚至模板['key']='value',都无效。为了消除其他问题,我尝试对“值”使用简单的值,然后在警报中显示结果。如果我不尝试替换,警报将显示模板。如果我尝

我有一组模板,其中包含由%%key%%表示的关键短语(如果有问题,可以使用不同的分隔符)。在给出的代码中,模板的名称显示在选择器中,选中后,它们的值当前将移动到文本区域中显示。在显示它们之前,我希望浏览一下模板,并用与该键关联的值替换每个键

我已尝试使用template.gsub'键''值',template.gsub!'键“value”,甚至模板['key']='value',都无效。为了消除其他问题,我尝试对“值”使用简单的值,然后在警报中显示结果。如果我不尝试替换,警报将显示模板。如果我尝试这些尝试中的任何一种,我都不会得到要显示的警报,我想这表示某种javascript错误。我想不出是什么错误

以下是应用程序_helper.rb的一部分:

#----------------------------------------------------------------------------
def render_haml(haml,locals={})
Haml::Engine.new(Haml.strip\u herdoc,格式::html5).render(self,locals)
结束
#----------------------------------------------------------------------------
def创建模板选择器
获取模板()

render_haml在
:javascript
块中,您应该编写javascript,而不是Ruby

String#gsub
是一种Ruby方法

是一个JavaScript方法

var filled = data.replace(/%%first_name%%/g, 'Ralph');
编辑:忘记用字符串替换
只替换一次。改用带有全局标志的正则表达式

另外:要将数据从Ruby传递到JavaScript,请在模板中使用以下模式:

<script>
  const fillIns = <%= fill_ins.to_json %>;
</script>

谢谢,在你解释之后,这是显而易见的!我试过了,它做了一次更换。如何在javascript中访问fill_ins(),然后在javascript中进行替换?我应该做一个字符串标记器并以某种方式查找fill_ins()散列中的每个单词吗?
 How can I create a set of fill_ins like:
var filled = data.replace(/%%first_name%%/g, 'Ralph');
<script>
  const fillIns = <%= fill_ins.to_json %>;
</script>
var filled = data.replace(/%%([^%]+)%%/g, (_, name) => fillIns[name]);