Ember.js 在Ember CLI上使用Not或/Not和

Ember.js 在Ember CLI上使用Not或/Not和,ember.js,ember-cli,ember.js-2,Ember.js,Ember Cli,Ember.js 2,所以我想知道是否有一个计算字符串属性,它对属性的当前布尔值求反。例如,在下面的计算属性“isDisabledSubmit”中,我在isValidEmail和isValidMessage前面添加了一个感叹号,试图对属性值求反。这是行不通的,但是你可以假设我想要完成什么。我可以通过添加两个额外的属性isInvalidEmail和isInvalidMessage使其工作,但在大型应用程序中这似乎有点过分。。。有没有一种方法可以在and/or中执行not and和not或/否定属性 export def

所以我想知道是否有一个计算字符串属性,它对属性的当前布尔值求反。例如,在下面的计算属性“isDisabledSubmit”中,我在isValidEmail和isValidMessage前面添加了一个感叹号,试图对属性值求反。这是行不通的,但是你可以假设我想要完成什么。我可以通过添加两个额外的属性isInvalidEmail和isInvalidMessage使其工作,但在大型应用程序中这似乎有点过分。。。有没有一种方法可以在and/or中执行not and和not或/否定属性

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.match
Ember.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}}
请注意,此方法不太明确,只能在模板内使用