【问题标题】:Jade Templates - Dynamic AttributesJade 模板 - 动态属性
【发布时间】:2012-11-15 13:37:07
【问题描述】:

我想为一些 html 元素动态创建属性。

就我而言,我想根据user.role 设置(或不设置)禁用属性。

所以,如果user 有权编辑某些字段,我不想在元素上设置禁用属性。否则,我确实想要它。

我知道我可以通过以下方法做到这一点:

- 方法 1 - 使用条件

if (user.role === 1)
   input(type='text', name='foo')
else
   input(type='text', name='foo', disabled)

- 方法 2 - 纯 HTML

- var disabledAttr = (user.role === 1) ? "disabled" : "";
| <input type="text" name="foo" #{ disabledAttr} />

方法 1 不好,因为我需要重复一些代码。使用方法 2 我不需要重复代码,但我必须使用纯 HTML 而不是 Jade 标记。

我试过这样的:

input(type='text', name='foo', #{ disabledAttr} )

但是jade生成如下代码:

<input type="text" name="foo" disabledattr="" />

有更好的主意吗?

【问题讨论】:

    标签: templates pug


    【解决方案1】:

    Jade 在需要弄清楚如何渲染属性时非常聪明。您可以使用这一行玉标记来呈现您的禁用属性

    input(type='text', name='foo', disabled=role!==1)
    

    【讨论】:

    • 像魅力一样工作!谢谢!
    • 同样适用于例如selectselect( name="filter" ) option( value="all" selected=(selected === 'all') ) All option( value="articles" selected=(selected === 'articles') ) Articles
    【解决方案2】:

    你可以有条件地使用一堆属性:

    input(type='text')&attributes(user.role === 1 ? {'disabled': 'true'} : {'class': 'admin', 'ng-model': 'vm.model.name', 'ng-click': 'vm.click()'})
    

    【讨论】:

    • 这真的很有帮助,因为我们不想添加属性而不是添加默认值 false,非常感谢!
    【解决方案3】:

    这个语法对我有用:

    input(placeholder!="<%= translate('Add new item') %>")
    

    其中 translate 是一个返回翻译文本的函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-03
      • 2013-05-23
      • 2018-02-16
      • 2012-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多