2017-03-03 4 views
0

私は答えを見たら馬鹿だと思うが、なぜorが働いているのかという理由で私の頭を包み込むことはできないが、andはこのComputedPropertyにない。チュートリアルではandを使用する必要があると提案しましたが、これがうまくいかない場合はどうすればいいのか分かりません。Ember.ComputedPropertyに「または」動作していますが、「および」はありません。

私はEmberと親しみやすいが、実際にはjavascriptで快適ではないので、私はここで何が起こっているのか理解しづらいと思っています。

ボタンの前にtrueの2つのプロパティが必要です。isDisabledそれぞれのプロパティをブール値の状態を逆転させる独自のプロパティに渡すので、元のプロパティが反転されるまで、isDisabledはボタン上でアクティブのままです。

contact.js

emailAddress: '', 
    message: '', 

    //**original properties** 
    isValid: Ember.computed.match('emailAddress', /^[email protected]+\..+$/),//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 

のvalidMessageを置く場合"または"これのために働く、なぜではない "と"ない "か?

答えて

1

厥だけド・モルガンの法則。あなたが望む

は、両方の値が有効である場合にのみ有効にすること。あなたはボタンをしたいので際にアクティブにするボタンになることですisValid and validMessage

not(isValid and validMessage)

01の場合、ボタンを無効にすることを意味します。

モルガンの法則のため、これは(not isValid) or (not validMessage)に相当します。

notYetnot isValidに等しいので、(not isValid) or (not validMessage)notYet or (not validMessage)に等しくなります。

そして、notNownot validMessageに等しいので、notYet or (not validMessage)notYet or notNowに等しい。

これはまさにあなたのisDisabledです。なぜあなたのコードが動作するのですか?単純な数学。もちろん、この文脈ではnotYet or notNowは別のものになります。ただしこれは同等です:

isEnabled: Ember.computed.and('isValid', 'validMessage'), 
isDisabled: Ember.computed.not('isEnabled'), 
0

私はあなたの質問を正しく理解しているかどうかはわかりません。私の知る限り、isDisabledが元の値(isValidvalidMessage)の両方が真である場合にのみ真となることを望みます。あなたがする必要があるのは、「ANDこれらの2つのプロパティ」または「それぞれの値ではなくORされた結果ではありません」です。twiddleが表示されます。計算プロパティーに関連するすべてのもの(ANDing、NOTingなど)予想通り。私はこの期待に役立ちます。

+0

お返事ありがとうございます。要するに、「私のコードが動作し、私のコードがなぜ機能するのかわかりません」ということです。 – Lenocam

関連する問題