使content_for与Slim一起使用

时间:2013-01-30 23:19:16

标签: ruby sinatra slim-lang

我正致力于在Hardwired中实现content_for和yield_content支持。

Sinatra :: Contrib实现不起作用,所以我尝试了一个更简单的版本:

  module ContentFor

    def content_for(key, &block)
      content_blocks[key.to_sym] << block.call
      return ""
    end

    def content_for?(key)
      content_blocks[key.to_sym].any?
    end

    def yield_content(key, *args)
      content_blocks[key.to_sym].join
    end

    private

    def content_blocks
      @content_blocks ||= Hash.new {|h,k| h[k] = [] }
    end
  end

不幸的是,这会重复内容(content_for似乎抓住了模板中的所有内容,而不仅仅是儿童内容)。

我应该采取什么方法来实施?

1 个答案:

答案 0 :(得分:4)

如果您使用===,而不是-,则Slim仅捕获子内容。

只需使用= content_for :area do代替- content_for :area do

注意:显然此问题特定于Sinatra风格的content_foryield_content。显然,更复杂的Rails实现设法使用缓冲魔术来实现-