4

如何以编程方式将脚本或样式表标签添加到页面的 YAML 前端(元)中指定的页面?

假设有src/documents/posts/a.html.eco以下内容:

---
layout: default
scripts: ['a.js']
---

Blog post that requires a special javascript

src/layouts/default.html.eco并具有以下内容的布局:

...
@getBlock('scripts').toHTML()
</body>
...

的最终结果posts/a.html应该是:

...
<!-- some extra stuff that was added when processing script tag -->
<script scr="/scripts/a.js"></script>
</body>
...

..而其他页面不应该有参考/scripts/a.js

标签上面的注释只是为了表明在注入标签之前可能需要进行一些处理。

我尝试了许多使用不同文件的方法(包括从插件events中获取的方法),但每次我都面临同样的问题 - 脚本标签被应用于所有页面,而不是仅应用于。这是我的尝试之一:docpad.coffeedocpad-plugin-livereloada.html

renderDocument: (opts) ->
  {extension,templateData,file,content} = opts
  if extension == 'html' and scripts = file.get('scripts')
    if typeof scripts != 'undefined'
      scripts.forEach (scriptName) ->
        @docpad.getBlock('scripts').add('<!-- custom script tag here -->')

我也尝试过render事件populateCollections(没有记录,但我在docpad-plugin-livereload插件中找到了它)甚至extendTemplateData事件,到目前为止还没有运气。

我知道有一种方法可以在布局内执行此操作:

@getBlock('scripts').add(@document.scripts or [])

..这完全没问题,它确实可以按预期工作,但是它似乎没有为我提供足够的自由来在将内容注入页面之前对其进行操作..即使有可能我也不喜欢拥有的想法布局模板中有一些繁重的逻辑,我希望它在插件/docpad.coffee 中

希望这是有道理的

4

1 回答 1

0

尝试templateData.getBlock('scripts').add代替docpad.getBlock('scripts').add

于 2013-07-15T23:02:16.750 回答