【问题标题】:Using Pugjs, what's the proper way to include a mixin within a links href attribute?使用 Pugjs,在链接 href 属性中包含 mixin 的正确方法是什么?
【发布时间】:2018-09-13 20:44:25
【问题描述】:

tl;dr:在链接 href 属性中插入 mixin 的正确方法是什么?


我开始使用 Pug,但是当我尝试使用 mixin 生成属性值时遇到了问题。在我的模板中,我需要使用来自第三方网站的短代码来动态包含电话号码(和其他设置);我创建了一个简单的 mixin 来生成:

//- mixins.pug

mixin setting(value)
    | [setting:#{value}]

在我的 header.pug 模板中,我尝试为电话号码编写一个默认链接,我将其插入到右侧小部件块中;使用三列标题。当第三方服务器处理时,mixin 生成的短代码会从他们的数据库中获取电话号码。

//- header.pug

block right-widget
    h3.title
        | Call:
        a(href='tel:' +setting('Company Phone'))
            +setting('Company Phone')
    +button_reserve

当我尝试包含设置 mixin 以创建电话号码的简码时,它最终被作为字符串插入。以下是生成的 HTML 示例:

<h3 class="title">
    Call: <a href="tel:" settings('Company="settings('Company" Phone')="Phone')">companyPhone</a>
</h3>

而不是想要的结果:

<h3 class="title">
    Call: <a href="tel:[setting:Company Phone]">[setting:Company Phone]</a>
</h3>

我尝试的一个解决方案是使用无缓冲代码来包含 mixin,如下所示:

//- header.pug

block right-widget
    - var phone = +setting('Company Phone')
    h3.title
        | Call:
        a(href='tel:' + phone)
            phone
    +button_reserve

但是当我这样做时,我得到一个错误,说设置(mixin)不是一个函数。我也尝试了没有 var 的情况,只是想看看会发生什么。搜索时,我没有看到任何讨论这个问题。我尝试的解决方案来自这个stackoverflow post。单线和多线解决方案都必须过时,因为它们对我不起作用。

最好的设置方法是什么?

【问题讨论】:

    标签: javascript templates pug


    【解决方案1】:

    Mixins 旨在用于标签级别。 a 标签的简单 mixin 可以是:

    mixin setting(value)
      a(href= 'tel:[setting:' + value + ']')= '[setting:' + value + ']'
    

    您还可以使用 javascript 函数 来执行字符串操作等操作:

    - let settingString = (value) => { return '[setting:' + value + ']'}
    

    将它们结合起来可能会很强大,并且可能是您正在寻找的:

    // function
    - let settingString = (value) => { return '[setting:' + value + ']'}
    
    // mixin (that uses the function)
    mixin settingLink(value)
      a(href= 'tel:' + settingString(value))= settingString(value)
    
    // mixin call
    h3.title
      | Call: 
      +settingLink('Company Phone')
    

    这呈现:

    <h3 class="title">
      Call: <a href="tel:[setting:Company Phone]">[setting:Company Phone]</a>
    </h3>
    

    【讨论】:

    • 感谢肖恩的回复,非常感谢。因此,您是否建议在单个文件中设置所有约 20 个这样的短代码,并且只在需要使用它们的任何时候包含函数,而不是使用 mixins,因为有些需要在属性中使用?像您上面提到的第三方简码.pug 之类的东西?也许与他们一起定义一个班级会更好?在使用 Pug/js 时,这两者都适合使用吗?
    • 您能否用各种“简码”以及您希望如何使用它们来扩展您的问题?可能有更有效的方法来做到这一点,但很难从有限的例子中看出
    • 当然可以。因此,[setting:Company Phone] 只是我将在此项目的哈巴狗模板中的某处插入的简码之一。还有很多其他的,例如[social media][recaptchajs][image][text][video] 等。这些短代码中的大多数也有自己可以设置的属性,有点像 HTML元素有属性。
    • 因此,图像短代码的示例类似于[image:!{className}?d=!{defaultUrl}&amp;w=!{width}&amp;h=!{height}] 视频短代码具有相似的属性以及其他一些属性。虽然其中一些在第三方平台上加载时会生成自己的 HTML,但其中一些旨在用于 HTML 属性(如 class、href 等)。最好将它们重新组织为函数,而不是的 mixins,包含在 pug 模板文件中,只在我需要使用它们时包含它们,或者有更好的方法来设置它们以在 Pug 中使用?
    • 如果这没有意义,请告诉我,我会提出一个新问题并链接它,感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 2021-03-21
    • 2019-07-28
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    相关资源
    最近更新 更多