所以我想知道是否有一个计算的字符串属性使该属性的当前布尔值取反。例如,在下面的计算属性“ isDisabledSubmit”中,我在isValidEmail和isValidMessage前面添加了一个感叹号,以试图抵消属性值。这行不通,但是您可以假设我正在尝试完成。我可以通过添加两个额外的属性isInvalidEmail和isInvalidMessage使其工作,但是在大型应用程序中这似乎有点过多...是否有一种方法可以对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.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}}
请注意,此方法不太明确,仅在模板内部有效。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句