2017-03-03 3 views
0

Ich denke, ich werde dumm fühlen, sobald ich die Antwort sehe, aber ich kann nicht meinen Kopf darum herum, warum or funktioniert, aber and ist nicht auf diese ComputedProperty. Das Tutorial schlug vor, ich müsste and verwenden, aber ich kann nicht herausfinden, wie ich das machen würde, wenn das nicht funktioniert.Warum funktioniert "oder" aber "und" nicht in meiner Ember.ComputeProperty?

Am Anfang bin ich neu in Ember und vertraut, aber nicht wirklich komfortabel mit Javascript, weshalb ich vermute, ich habe Schwierigkeiten zu verstehen, was hier vor sich geht.

Ich habe zwei Eigenschaften, die ich beide sein muss true vor einer Schaltfläche isDisabled. Ich gebe jedes von ihnen an ihre eigenen Eigenschaften weiter, die ihren booleschen Zustand umkehren, also bleibt isDisabled auf einem Knopf aktiv, bis die ursprünglichen Eigenschaften beide gekippt werden.

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 

Wenn ich im richtigen Format emailaddress setzen:

emailAddress = true 
notYet = false 
isDisabled = true //still 

Wenn ich legte eine validMessage von 5 Zeichen dann oder mehr

validMessage = true 
    notNow = false 
    isDisabled = false //now 

Warum "oder" arbeite dafür, warum nicht "und" oder "nicht"?

Antwort

1

das ist nur De Morgan Gesetze.

Was Sie wollen, ist die Taste, um sein nur dann aktiviert werden, wenn beide Werte gültig sind. so können Sie die Taste aktiv werden möchten, wenn isValid and validMessage

Das bedeutet, dass Sie die Schaltfläche deaktivieren möchten, wenn not(isValid and validMessage).

Aufgrund de Morgans Gesetz entspricht dies (not isValid) or (not validMessage).

Da notYet gleich not isValid ist, ergibt sich, dass gleich notYet or (not validMessage) ist.

Und weil notNow gleich not validMessage folgt daraus, dass notYet or (not validMessage) zu notYet or notNow gleich ist.

Und das ist genau Ihre isDisabled. Deshalb funktioniert dein Code. Einfach einfache Mathematik. Und natürlich wäre in diesem Zusammenhang notYet or notNow etwas anderes. Dies würde jedoch äquivalent sein:

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

Ich bin nicht ganz sicher, ob ich Ihre Frage richtig verstehe; aber soweit ich das verstehe, wollen Sie isDisabled nur dann wahr, wenn beide Ihrer ursprünglichen Werte (isValid und validMessage) wahr sind. Was Sie tun müssen, ist entweder "UND diese beiden Eigenschaften" oder "NICHT die ORED Ergebnis NOT von jedem Wert. Sie können sehen, die twiddle ich vorbereitet und alles (ANDing, NOT, etc.) im Zusammenhang mit berechneten Eigenschaften zu sehen funktioniert wie erwartet. ich hoffe, das hilft.

+0

Danke für die Antwort. Kurz gesagt, was ich sage ist: "Mein Code funktioniert, ich verstehe nicht, warum mein Code funktioniert." – Lenocam

Verwandte Themen