如何以编程方式将脚本或样式表标记添加到页面的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.coffee
尝试了很多方法(包括从docpad-plugin-livereload
插件中获取的方法)但每次遇到同样的问题时 - 脚本标记都应用于所有页面而不是仅应用于a.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 [])
..这是完全正常的,它确实按预期工作,但它似乎没有提供足够的自由来操纵内容,然后它被注入页面..即使它&# 39;可能我不喜欢在布局模板中加入一些重要逻辑的想法,我希望它在插件/ docpad.coffee中
希望这是有道理的
答案 0 :(得分:0)
尝试使用templateData.getBlock('scripts').add
代替docpad.getBlock('scripts').add