[英]How do I write Slim helpers in Sinatra?
我正在使用Sinatra和Slim。 我正在嘗試找出如何為Slim編寫助手的方法,以便可以干燥模板。 (在這種情況下,幫助程序很小,我可以使用嵌入式Ruby,但是將來我會做更復雜的事情)。
我在文件lib / slim_helpers.rb中有以下幫助程序(已擴展調試):
module SlimHelpers
# foo converts strings like 'AWS::AutoScaling::AutoScalingGroup'
# to 'Auto Scaling Group'
def foo(input, &block)
last = input.split('::')[-1]
result = last.gsub(/([A-Z])/, ' \1').lstrip
puts "result: #{result}"
yield result
end
end
我有以下(簡化的)Sinatra應用程序:
require 'sinatra/base'
require 'slim'
require_relative 'lib/slim_helpers.rb'
class SinatraApp < Sinatra::Base
include SlimHelpers
get '/' do
puts '==> in /'
@result = Bar.bar('dev')
slim :qux
end
end
在我的模板中,我有以下代碼:
- result.resources.each do |r|
div class="list-group"
div class="list-group-item active"
h5 class="list-group-item-heading"
= foo r["ResourceType"]
但是,渲染網頁時出現以下錯誤:
LocalJumpError at /some/url
no block given (yield)
file: slim_helpers.rb location: foo line: 9
BACKTRACE
/Path/lib/slim_helpers.rb in foo
yield result
/Path/views/asg.slim in block (3 levels) in singleton class
= foo r["ResourceType"]
... etc
所以我想知道這里的塊是什么,如何將輸入傳遞給foo
函數並從中返回結果?
您根本不需要塊,只需返回字符串,它就會被包含在模板中的那個位置:
def foo(input)
last = input.split('::')[-1]
result = last.gsub(/([A-Z])/, ' \1')
puts "result: #{result}"
result # or 'return result' if you prefer
end
helpers SlimHelpers
說include SlimHelpers
,在Sinatra中,您通常會使用helpers SlimHelpers
而不是include SlimHelpers
(盡管通過簡單地調用include
來實現helpers
工具 )。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.