我想根据模型的特定字段是否有错误在包含模板控件的 div 上设置一个 css 类。我知道我可以在控制器上创建布尔属性并设置/取消设置它们。但出于多种原因,我不想这样做。
所以我想要这样的东西:
<div {{bindAttr class="(errors.email != undefined):error"}}>
{{view Ember.TextField placeholder="Email" valueBinding="email" required=true}}
</div>
或者
<div class="{{(errors.email != undefined ? 'error' : '')}}">
{{view Ember.TextField placeholder="Email" valueBinding="email" required=true}}
</div>
我觉得这样的事情在 Ember 中必须是可能的!
更新:
折断!发布后,我意识到我可以做一个{{#if}}。稍后将为有兴趣的人发布解决方案。很基础的东西。我希望。
更新 2:
看起来也不可能在条件中包含布尔表达式(例如 {{#if}} 或 {{#unless}} )。但就我而言,我可以检查 errors.emails 是否真实:
{{#if errors.email}}
<div class="control-group error">
{{/if}}
{{view Ember.TextField placeholder="Email" valueBinding="email" required=true}}
{{#if errors.email}}
</div>
{{/if}}
不漂亮,但你会期望它工作。然而,它并没有像我预期的那样呈现。当出现电子邮件错误时,不会将 TextField 包装在 div 中,而是在 TextField 控件之前打开和关闭 div。这是它的渲染方式:
<div class="error">
<script id="metamorph-21-end" type="text/x-placeholder"></script>
</div>
<input class="ember-view ember-text-field" placeholder="Email" type="text" required="required">
我想我可以将 TextField 放在 {{#if}} 和 {{else}} 中,但它越来越难看。任何美化建议将不胜感激。
这是我现在的做法:
{{#if errors.email}}
<div class="control-group error">
{{view Ember.TextField placeholder="Email" valueBinding="name"}}
<span class="help-inline">{{errors.email}}</span>
</div>
{{else}}
{{view Ember.TextField placeholder="Email" valueBinding="email" required=true}}
<label class="required">* required</label>
{{/if}}
它可以工作,并且在浏览器中看起来不错。但我知道我必须在某个时候将它重构为更干燥的东西。不能为每个经过验证的字段创建这些 8 行块。