【问题标题】:Conditionally mark a checkbox as checked in Meteor using Blaze使用 Blaze 有条件地将复选框标记为在 Meteor 中已选中
【发布时间】:2015-08-18 01:21:50
【问题描述】:

我不完全确定这里出了什么问题,或者我应该如何以不同的方式处理它 - 但谷歌搜索只会带来对“isChecked”的引用 - 我没有使用。

如果相关字段值存在,我只想将复选框标记为已选中:

<input type="checkbox" name="services.bananaExports" {{ #if currentUser.profile.services.bananaExports }} checked {{ /if }} />

但我得到了:

响应式 HTML 属性必须有一个常量名称 或由单个 {{helper}} 提供名称字典和 价值观。此处不允许使用 BLOCKOPEN 类型的模板标签。

老实说,我不确定这试图告诉我什么,我是流星/火焰的新手,但它是一个非常基本的 if 子句?我不能在这里发出 if 语句吗?如果不是,我将如何处理?

【问题讨论】:

    标签: meteor meteor-blaze


    【解决方案1】:

    我能想到的最佳解决方案是定义一个像这样的助手:

    Template.registerHelper('isTruthy', function(varName) {
      return !!varName;
    });
    

    然后你可以这样做:

    {{#each foodList}}
      {{foodName}} <input type="checkbox" checked={{isTruthy eaten}}>
    {{/each}}
    

    当然,在你的情况下:

    <input type="checkbox" name="services.bananaExports" checked={{isTruthy currentUser.profile.services.bananaExports}}>
    

    【讨论】:

    • 谢谢@ffxsam - 实际上我确实在帮助程序中得到了类似的东西:return (value == 'on' ? 'checked' : false);
    • 这很具体,最好有一个更通用的助手。 isTruthy 助手可用于许多不同的场景,例如&lt;button disabled={{isTruthy Session.get('loading')}}&gt;.
    • @NathanHornby PS:编辑我的代码以使用全局帮助程序,以便您可以跨所有模板使用
    • 对不起,忽略以上内容,您实际上不能在 Blaze 中引用 Session。当我的时间限制到期时,我会编辑该评论..
    • @ffxsam 时间限制适用于所有人。五分钟后您无法更改评论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    • 2011-04-14
    相关资源
    最近更新 更多