所以我想知道是否有一个计算字符串属性否定了属性的当前布尔值。例如,在下面的计算属性'isDisabledSubmit'中,我在isValidEmail和isValidMessage前面添加了一个感叹号,试图否定属性值。这不起作用,但你可以假设我想要完成的事情。我可以通过添加两个额外的属性isInvalidEmail和isInvalidMessage来实现它,但是这在大型应用程序中看起来有点过分...有没有办法做一个不和和/或否定一个属性和/或?
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')
});
答案 0 :(得分:1)
简而言之否。
Ember.js强制您明确说明可用的属性,并使用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}}
与
相同{{1}}
请注意,此方法不太明确,只能在模板中使用。