我有一个带有属性的类:
import { and, not } from '@ember/object/computed';
EmberObject.extend({
a: false,
notA: not('a'),
b: true,
c: true,
d: and('b', 'c', 'notA')
});
所以d
依赖于a
的取反。
是否有一种注释可以做类似d: and('b', 'c', '!a')
的事情,这样我就不需要多余的notA
属性?
答案 0 :(得分:1)
您可以使用ember-awesome-macros
,它支持编写宏:
import { and, not } from 'ember-awesome-macros';
EmberObject.extend({
a: false,
b: true,
c: true,
d: and('b', 'c', not('a'))
});
答案 1 :(得分:0)
有没有做类似...的标记
不。但是,您可以对完整的计算出的程序进行编程:
d: computed('a', 'b', 'c', function() {
return !this.a && this.b && this.c;
}),
不过,您可以使用以下内容自行构建:
function betterAnd(...props) {
const positiveDeps = props
filter(x => !x.startsWith('!'));
const negativeDeps = props
.filter(x => x.startsWith('!'))
.map(x => x.substr(1));
return computed(...positiveDeps, ...negativeDeps, function() {
return [
...positiveDeps.map(x => this.get(x)),
...negativeDeps.map(x => !this.get(x)),
].reduce((a, b) => a && b, true);
});
}
然后您可以执行d: betterAnd('b', 'c', 'notA')
。