首页 > 解决方案 > 如何让 config.rb 中的嵌套循环在 Middleman 中工作?

问题描述

我们多年来一直致力于静态 HTML 网站构建器 Middleman。在最近的一次升级之后,我们遇到了一个让我们整个团队都陷入困境的问题。在 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/并且找不到任何有帮助的东西。

标签: rubymiddlemancontentful

解决方案


更新:虽然我们还没有找到任何真正的文档,但这里是答案。
在 .html.erb 模板中使用data.site作品时,在 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

推荐阅读