【问题标题】:Accessing JSON attributes within Jade Mixins在 Jade Mixins 中访问 JSON 属性
【发布时间】:2015-05-09 21:55:41
【问题描述】:

动机

我的 Jade 模板中嵌入了一些丑陋的工作代码,我想将其移动到一个 mixin 中,以便它更具可读性、可维护性等。

代码

混合的简化等效版本是:

mixin mixinName(param1, param2, paramObject)
    .tile(class="#{param1 >= paramObject['atr1'] && param1 < paramObject['atr1'] + paramObject['atr2'])?'additionalClass':''"}) &nbsp;

为什么我认为这应该有效?

如果不是&amp;nbsp;,而是使用paramObject,我会在HTML 中得到对象内容,比如{atr1: 2, atr2: 2},所以它们就在那里。如果我改为输入paramObject['atr1']paramObject.atr1 等,我只会得到一个空格。我的猜测是我没有正确访问属性。

玉代码上下文

我认为它不需要,但它是。

...
template(repeat="{{col in columns | enumerate}}")
    .col
        template(repeat="{{tile in col.value | enumerate}}")
            +mixinName("{{col.index}}", "{{tile.index}}", "{{cursor}}")
...

丑陋的解决方法

我认为这很难看,因为我确实有更多参数,还有更多我需要在 paramObject 中比较的属性/字段,所以它只会弄乱 Jade 模板的其余部分。

mixin mixinName(param1, param2, paramObjectAtr1, paramObjectAtr2)
    .tile(class="#{param1 >= paramObjectAtr1 && param1 < paramObjectAtr1 + paramObjectAtr2)?'additionalClass':''"}) &nbsp;

玉代码上下文

与之前基本相同,只是将每个对象参数作为不同的参数发送。

...
template(repeat="{{col in columns | enumerate}}")
    .col
        template(repeat="{{tile in col.value | enumerate}}")
            +mixinName("{{col.index}}", "{{tile.index}}", "{{cursor['atr1']}}", "{{cursor['atr2']}}")
...

【问题讨论】:

    标签: json pug mixins javascript-objects


    【解决方案1】:

    奇怪的是paramObject 代替了&amp;nbsp。玉语法应该是:

    .tile(...)= paramObject
    

    .tile(...) #{paramObject}
    

    如果你只是在标签或类名之后使用空格,Jade 认为你的意思是纯文本,而不是 JS 代码。

    至于你的mixin,你可以去:

    mixin mixinName(param1, param2, paramObject)
      - var moarClasses = [];
      - if (param1 >= paramObject.atr1 &&
      -     param1 < paramObject.atr1 + paramObject.atr2)
      -   moarClasses.push('additionalClass');
    
      .tile(class=moarClasses)= paramObject.atr3
    

    【讨论】:

    • 可能语法不正确,但是在mixin的最后一行,我会遇到这种情况: 1 .tile(class=moarClasses) {{cursor['atr1']}} 返回预期的结果,即atr1的内容属于光标。 2 .tile(class=moarClasses)= cursor['atr1'].tile(class=moarClasses) #{cursor['atr1']} 磁贴显示为空。 3 在第一种情况下将cursor['atr1'] 更改为cursor.atr1 会产生运行时错误。其次,它们表现出相同的行为。有效的情况是因为它使用定义为全局的cursor,而不是mixin参数(我将其命名为cursor而不是paramObject)
    • 无论如何感谢您的回答,我标记为已接受,因为我认为 moarClasses 的想法很有帮助。经过许多变化并花费了几个小时后,我仍然没有设法使条件(或丑陋的a?b:c)工作,所以我将使用一些解决方法并开始(与我在问题中提到的不同)。
    • 抱歉回复晚了。总而言之,我怀疑您的问题可能在 Jade 之外只会增加。因为here's a pen 在纯 Jade 中使用 Jade 语法,无论是 .tile()= cursor.atr3 还是 .tile() #{cursor.atr3} 显然都有效,而您的 Mustache 式语法显然无效。这意味着在您的情况下,小胡子替换是由其他东西完成的其他东西还有什么影响,我不知道。
    猜你喜欢
    • 2016-04-07
    • 1970-01-01
    • 2022-01-24
    • 2019-07-27
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多