如何让 config.rb 中的嵌套循环在 Middleman 中工作?

How to get nested loops in config.rb to work in Middleman?

我们多年来一直致力于 Middleman,静态 HTML 网站构建器。在最近的升级之后,我们 运行 遇到了一个困扰我们整个团队的问题。在 config.rb 中,所有 proxy 调用都可以正常工作,直到我们尝试 运行 像这样的嵌套循环:

data.site.datatype.each do | id, c |
         puts c
      data.site.datatype.each do | id, c2 |
         puts c2
      end
    end

[注意 data.site.datatype 是使用 middleman-contentful 导入的 .yaml 文件。]

行为是外循环运行正常但内循环拒绝执行。

外层循环(puts c)的输出显示 .yaml 负载的中间人导入如下:

#<Middleman::Util::EnhancedHash id="id-1" name="comp1" slug="comp1">
#<Middleman::Util::EnhancedHash id="id-2" name="comp2" slug="comp2">

我们已经在这个问题上停留了一个星期了,非常欢迎任何指导!

Gemfile如下:

source 'https://rubygems.org'
gem 'middleman', '~> 4.2'
gem 'middleman-autoprefixer', '~> 2.7'
gem 'tzinfo-data', platforms: [:mswin, :mingw, :jruby, :x64_mingw]
gem 'wdm', '~> 0.1', platforms: [:mswin, :mingw, :x64_mingw]
gem 'middleman-dotenv', '~> 2.0'
gem 'contentful_middleman', '~> 4.2.0'

否则 config.rm 有 activate :dotenvactivate :contentful

我们已经返回到 https://middlemanapp.com/advanced/dynamic-pages/,在那里找不到任何有用的东西。

更新: 虽然我们还没有找到任何关于此的真实文档,但这里是答案。
虽然 data.site 在 .html.erb 模板中有效,但在 config.rb 中对数据文件的调用需要 @app.data.site.

所以上面的示例代码应该是

@app.data.site.datatype.each do | id, c |
         puts c
      @app.data.site.datatype.each do | id, c2 |
         puts c2
      end
    end

提示来自 Middleman 仓库:

https://github.com/middleman/middleman/blob/master/middleman-core/lib/middleman-core/core_extensions/data.rb#L15-L19

    # Make the internal `data_store` method available as `app.data`
    expose_to_application data: :data_store

    # Exposes `internal_data_store` to templates, to be wrapped by `data` in the context
    expose_to_template internal_data_store: :data_store