如何在用 haml 编写的布局页面中的 javascript 片段中成功集成 Middleman frontmatter 变量?

How do I successfully integrate a Middleman frontmatter variable in a javascript snippet in the layout page written in haml?

昨天我决定加入 MiddlemanHAML,他们很棒! 因为我不想只为一个值创建多个布局,所以我尝试使用 frontmatter 变量 来更改 javascript 片段中的值在布局页面底部。

javascript 代码段包含在 :javascript 过滤器 (here's the reference), that triggers a jQuery plugin. The plugin needs some variables. The variable I want to change in other pages is top. According to the Middleman frontmatter guide page (here's the reference) 中,您只需在布局页面中需要该变量的位置添加 <% current_page.data.top %>。这个用 erb 写的字符串在 = current_page.data.top 中被翻译成 haml 但是当我在浏览器中 运行 页面时,开发者控制台告诉 SyntaxError: expected expression, got '='.

如何在用 haml 编写的布局页面的 javascript 片段中成功集成 Middleman frontmatter 变量?

布局页面的底部(代码段所在的位置)如下所示:

/ content of the layout the page

:javascript
    $('#sidenav').simplerSidebar({
        opener: '#toggle-sidenav',
        top: = current_page.data.top
        animation: {
            easing: 'easeOutQuint'
        },
        sidebar: {
            align: 'right',
            width: 320,
            closingLinks: 'a',
            css: {
                zIndex: 3000
            }
        }
    });

我要更改的页面如下所示:

---
top: 30
---

/ rest of the page

我设法自己回答了我的问题。我再次仔细阅读了 Haml reference and in the Filter 部分 我阅读了 "Filters can have Ruby code interpolated with #{}.".

基本上,在过滤器下编码时(无论它是什么过滤器),而不是使用 Middleman 和 Haml 提供的字符串,您应该使用这个 #{current_page.data}

在我的例子中,片段代码应该是:

:javascript
    $('#sidenav').simplerSidebar({
        opener: '#toggle-sidenav',
        top: #{current_page.data.top},
        animation: {
            easing: 'easeOutQuint'
        },
        sidebar: {
            align: 'right',
            width: 320,
            closingLinks: 'a',
            css: {
                zIndex: 3000
            }
        }
    });