codecamp

Sinatra 查找模板文件

find_template 辅助方法被用于在渲染时查找模板文件:

find_template settings.views, 'foo', Tilt[:haml] do |file|
  puts "could be #{file}"
end

这并不是很有用。但是在你需要重载这个方法 来实现你自己的查找机制的时候有用。比如,如果你想支持多于一个视图目录:

set :views, ['views', 'templates']

helpers do
  def find_template(views, name, engine, &block)
    Array(views).each { |v| super(v, name, engine, &block) }
  end
end

另一个例子是为不同的引擎使用不同的目录:

set :views, :sass => 'views/sass', :haml => 'templates', :default => 'views'

helpers do
  def find_template(views, name, engine, &block)
    _, folder = views.detect { |k,v| engine == Tilt[k] }
    folder ||= views[:default]
    super(folder, name, engine, &block)
  end
end

你可以很容易地包装成一个扩展然后与他人分享!

请注意 ​find_template​ 并不会检查文件真的存在,而是对任何可能的路径调用给入的代码块。这并不会带来性能问题,因为 render 会在找到文件的时候马上使用 break。同样的,模板的路径(和内容)会在除 development mode 以外的场合 被缓存。你应该时刻提醒自己这一点,如果你真的想写一个非常疯狂的方法。


Sinatra 处理时间和日期
Sinatra 可选的设置
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Sinatra 配置

Sinatra 错误处理

Sinatra Sinatra::Base - 中间件,程序库和模块化应用

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }