Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么是;或;工作但是;及;不在我的Ember.ComputedProperty中?_Javascript_Ember.js_Boolean_Computed Properties - Fatal编程技术网

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'),

感谢您的回复。简而言之,我想说的是“我的代码可以工作,我不明白为什么我的代码可以工作。”