Javascript 为什么是;或;工作但是;及;不在我的Ember.ComputedProperty中?
我想,一旦我看到答案,我会觉得自己很愚蠢,但我无法理解为什么Javascript 为什么是;或;工作但是;及;不在我的Ember.ComputedProperty中?,javascript,ember.js,boolean,computed-properties,Javascript,Ember.js,Boolean,Computed Properties,我想,一旦我看到答案,我会觉得自己很愚蠢,但我无法理解为什么或在工作,而和不在这个计算属性上。教程建议我需要使用和,但如果这不起作用,我不知道该怎么做 首先,我对Ember是新手,熟悉javascript,但并不十分熟悉,这就是为什么我认为我很难理解这里发生了什么 我有两个属性,在禁用按钮isDisabled之前,我需要将它们都设置为true。我将它们中的每一个传递给它们自己的属性,这些属性会反转它们的布尔状态,因此isDisabled在按钮上保持活动状态,直到原始属性都翻转为止 contact
或在工作,而和不在这个计算属性上。教程建议我需要使用和
,但如果这不起作用,我不知道该怎么做
首先,我对Ember是新手,熟悉javascript,但并不十分熟悉,这就是为什么我认为我很难理解这里发生了什么
我有两个属性,在禁用按钮isDisabled
之前,我需要将它们都设置为true
。我将它们中的每一个传递给它们自己的属性,这些属性会反转它们的布尔状态,因此isDisabled
在按钮上保持活动状态,直到原始属性都翻转为止
contact.js
emailAddress: '',
message: '',
//**original properties**
isValid: Ember.computed.match('emailAddress', /^.+@.+\..+$/),//starts as false
validMessage: Ember.computed.gte('message.length', 5),//starts as false
//**my reversing boolean properties**
notYet: Ember.computed.not('isValid'),//starts as true
notNow: Ember.computed.not('validMessage'),//starts as true
//isDisabled must be true to be active disabling button
isDisabled: Ember.computed.or('notYet', 'notNow'),//starts as true
如果我输入了正确的emailAddress格式:
emailAddress = true
notYet = false
isDisabled = true //still
如果我输入一个5个字符或更多的有效消息
validMessage = true
notNow = false
isDisabled = false //now
为什么“或”适用于此,为什么“和”或“不”不适用于此?我不太确定我是否正确理解了你的问题;但据我所知,只有当原始值(isValid
和validMessage
)均为真时,您才希望isDisabled
为真。您需要做的是“和这两个属性”或“不是每个值的or结果”。您可以看到我准备的,并且看到与计算属性相关的所有内容(ANDIN、NOTing等)都按预期工作。我希望这会有所帮助。这只是德摩根定律
您希望的是,按钮仅在两个值都有效时才启用。因此,您希望按钮在有效且消息有效时处于活动状态
这意味着您希望在无效时禁用该按钮(isValid and validMessage)
根据德摩根定律,这相当于(无效)或(无效消息)
由于notYet
等于notisvalid
,因此(notisvalid)或(notvalidmessage)
等于notYet或(notvalidmessage)
由于notNow
等于notvalidmessage
,因此notYet或(notvalidmessage)
等于notYet或notNow
这正是你的被禁用的原因。这就是你的代码工作的原因。只是简单的数学。当然,在这个上下文中还没有或现在还没有
是另外一回事。但是这是等效的:
isEnabled: Ember.computed.and('isValid', 'validMessage'),
isDisabled: Ember.computed.not('isEnabled'),
感谢您的回复。简而言之,我想说的是“我的代码可以工作,我不明白为什么我的代码可以工作。”