답을 보면 어리석은 느낌이들 것 같지만, 왜 or
작동하고 있지만 and
이것에 대해하지 않는 이유에 대해 머리를 감을 수 는 없습니다 ComputedProperty
. 튜토리얼 and
에서는 을 사용해야한다고 제안 했지만 이것이 작동하지 않으면 어떻게해야하는지 알 수 없습니다.
시작하기 위해 저는 Ember를 처음 사용하고 익숙하지만 자바 스크립트에 익숙하지 않습니다. 그래서 여기서 무슨 일이 일어나고 있는지 이해하는 데 어려움이 있다고 가정합니다.
두 가지 속성이 모두 true
버튼 앞에 있어야 합니다 isDisabled
. 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를 입력하면
validMessage = true
notNow = false
isDisabled = false //now
왜 "또는"이 이에 대해 작동하고 "and"또는 "not"이 작동하지 않습니까?
그게 De Morgan의 법칙 입니다.
원하는 것은 두 값이 모두 유효 할 때만 버튼이 활성화되는 것입니다. 따라서 isValid and validMessage
.
이것은 당신이 not(isValid and validMessage)
.
de Morgan의 법칙으로 인해 이것은 (not isValid) or (not validMessage)
.
때문에 notYet
IS 같 not isValid
그 다음과 (not isValid) or (not validMessage)
같다 notYet or (not validMessage)
.
때문에 notNow
IS가 동일 not validMessage
그 다음과 notYet or (not validMessage)
같다 notYet or notNow
.
그리고 그것은 정확히 당신의 isDisabled
. 그것이 당신의 코드가 작동하는 이유입니다. 간단한 수학. 그리고 물론이 맥락 notYet or notNow
에서는 다른 것이 될 것입니다. 그러나 이것은 동일합니다.
isEnabled: Ember.computed.and('isValid', 'validMessage'),
isDisabled: Ember.computed.not('isEnabled'),
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다