4

我正在努力在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 似乎抓取了模板中的所有内容,而不仅仅是子内容)。

我应该采取什么方法来实现这一点?

4

1 回答 1

4

Slim 仅在您使用=or时捕获子内容==,而不是-

只需使用= content_for :area do而不是- content_for :area do

注意:显然这个问题是特定于 Sinatra 风格content_foryield_content. 显然,更复杂的 Rails 实现也设法使用缓冲区魔法来实现这一点-

于 2013-01-31T20:56:41.667 回答