使用 Not Or/Not 而在 Ember CLI

Using Not Or/Not And on Ember CLI

所以我想知道是否有计算字符串 属性 否定 属性 的当前布尔值。例如,在下面计算的属性 'isDisabledSubmit' 中,我在isValidEmail 和isValidMessage 前添加了感叹号,试图否定属性 值。这行不通,但您可以假设我正在努力完成什么。我可以通过添加两个额外的属性 isInvalidEmail 和 isInvalidMessage 来让它工作,但这在大型应用程序中似乎有点过分......有没有办法在里面做一个 not and and a not or/ negate a 属性一个 and/or?

export default Ember.Controller.extend({
contactForm: false,
contactEmail: '',
contactMessage: '',
isValidEmail: Ember.computed.match( 'contactEmail', /^.+@.+\..+$/ ),
isValidMessage: Ember.computed.gte('contactMessage.length', 10),
isDisabledSubmit: Ember.computed.or( '!isValidEmail', '!isValidMessage') 
});

可能但乏味的解决方案

export default Ember.Controller.extend({
contactForm: false,
contactEmail: '',
contactMessage: '',
isValidEmail: Ember.computed.match( 'contactEmail', /^.+@.+\..+$/ ),
isValidMessage: Ember.computed.gte('contactMessage.length', 10),
//Add negated version of previous properties...tedious approach...
isInvalidEmail: Ember.computed.not('isValidEmail'),
isInvalidMessage: Ember.computed.not('isValidMessage'),
//
isDisabledSubmit: Ember.computed.or( 'isInvalidEmail', 'isInvalidMessage') 
});

简而言之没有。 Ember.js 强制您明确说明 属性 可用的内容,并使用 Ember.computed.matchEmber.computed.not.

等方便的函数帮助您的代码可读

但是,如果您打算在模板中使用这些计算属性,则可以使用自定义帮助程序绕过此限制。只需创建一个包含以下内容的文件 app/helpers/reverse.js

import Ember from 'ember';

export function reverse([value]) {
  return !value;
}

export default Ember.Helper.helper(reverse);

然后您将能够根据计算的倒数进行分支 属性:

{{#if (reverse isValidEmail)}}
{{/if}}

相同
{{#if isInvalidEmail}}
{{/if}}

请注意,此方法不太明确,仅适用于模板。