【问题标题】:Inline condition内联条件
【发布时间】:2012-01-23 17:53:05
【问题描述】:
  - if (typeof(person) == 'undefined')
    input(type="text", name="person[Name]")
  - else
    input(type="text", name="person[Name]", value="#{person.Name}")

有没有办法写这个内联?我有一个选项选择,我不想为 30 多个值做一个条件语句来选择正确的选项。

【问题讨论】:

    标签: javascript node.js express pug


    【解决方案1】:

    你可以使用 mixins

    mixin safeInput(person, property)
      - if (typeof(person) == 'undefined')
        input(type="text", name="person[#{property}]")
      - else
        input(type="text", name="person[#{property}]", value="#{person[property]}")
    

    然后

    mixin safeInput(person, 'Name')
    mixin safeInput(person, 'Email')
    ...
    

    【讨论】:

    • 嗯,不错。我必须看看这是否也适用于选项选择。谢谢!
    【解决方案2】:

    条件语句应该做的

    input(type='text', name='person[Name]', value= (person?(person.name?person.name:''):''))
    

    但是,按照设计,我们总是可以通过一个人?这样就不需要比较了。代码类似于

    input(type='text', name='person[Name]', value= person.name)
    

    【讨论】:

    • 这当然很棒。传递一个空对象以防止“未定义”错误,无需混合或条件。我使用 JavaScript 选择列表中的选项,因为条件语句不起作用。
    【解决方案3】:

    你可以这样短路:

    input(type="text", name="person[Name]", value="#{person && person.Name}")
    

    【讨论】:

      【解决方案4】:

      当值为undefinednull时,该属性将不显示。这应该有效:

      input(type='text', name='person[Name]', value= person && typeof(person))
      

      【讨论】:

      • 不幸的是,如果 person 未定义,Jade 会显示 500 ReferenceError。如果定义了人员,则显示“字符串”而不是输入框中的值。所以这行不通。
      猜你喜欢
      • 2014-11-29
      • 1970-01-01
      • 2019-03-01
      • 2022-01-12
      • 2012-12-19
      • 2017-06-07
      • 2017-06-27
      • 2011-03-08
      • 2015-11-30
      相关资源
      最近更新 更多