Ruby on rails 带扶手的把手/胡须
我试图使用一个名为Ruby on rails 带扶手的把手/胡须,ruby-on-rails,handlebars.js,Ruby On Rails,Handlebars.js,我试图使用一个名为{{id}}的路由作为参数之一,允许手柄使用呈现的内容url\u for正在转义参数,因此生成的url包含%7B%7Bid%7D%7D。我尝试向调用中添加:escape=>false,但没有效果 routes.rb 汉密尔顿指数 application.js 输出 {{投票} 为了便于阅读,我简化了这个例子,但问题仍然是一样的;有没有任何方法可以使用带有{{}}的命名路由作为参数?我知道我可以做链接到'up','/rants/{{{id}}/vots/up',所以请不要提供
{{id}}
的路由作为参数之一,允许手柄使用呈现的内容url\u for
正在转义参数,因此生成的url包含%7B%7Bid%7D%7D
。我尝试向调用中添加:escape=>false
,但没有效果
routes.rb
汉密尔顿指数
application.js
输出
{{投票}
为了便于阅读,我简化了这个例子,但问题仍然是一样的;有没有任何方法可以使用带有
{{}}
的命名路由作为参数?我知道我可以做链接到'up','/rants/{{{id}}/vots/up'
,所以请不要提供这一答案。问题是胡须字符在URL中无效,正在转义。我建议创建一个包装器
def handlebar_path(helper, arguments={})
send("#{helper}_path", arguments).gsub(/%7B%7B(.+)%7D%7D/) do
"{{#{$1}}}"
end
end
handlebar_path :rant_vote, :rant_id => '{{id}}', :vote => 'up'
我只是覆盖了的
url\u来处理一个自定义参数:
module TemplateHelper
def url_for(*args)
options = args.extract_options!
return super unless options.present?
handle = options.delete(:handlebars)
url = super(*(args.push(options)))
handle ? url.gsub(/%7B%7B(.+)%7D%7D/){|m| "{{#{$1}}}"} : url
end
end
所以现在,调用named_url(:id=>'{{id}}',:handlebar=>true)
就像您所期望的那样工作。是的,我试图避免创建单独的方法。目前,我允许url_For()
处理一个额外的特殊参数::handlebar=>true
;最好使用修饰的方法,例如覆盖上述答案的url_。你提供了莫基补丁。
var vote_template = Handlebars.compile($('#vote_template').html());
<script id="vote_template" type="text/x-handlebars-template">
<div class='votes'>
<a href="/rants/%7B%7Bid%7D%7D/votes/up">up</a>
<span>{{votes}}</span>
<a href="/rants/%7B%7Bid%7D%7D/votes/down">down</a>
</div>
</script>
def handlebar_path(helper, arguments={})
send("#{helper}_path", arguments).gsub(/%7B%7B(.+)%7D%7D/) do
"{{#{$1}}}"
end
end
handlebar_path :rant_vote, :rant_id => '{{id}}', :vote => 'up'
module TemplateHelper
def url_for(*args)
options = args.extract_options!
return super unless options.present?
handle = options.delete(:handlebars)
url = super(*(args.push(options)))
handle ? url.gsub(/%7B%7B(.+)%7D%7D/){|m| "{{#{$1}}}"} : url
end
end