2017-02-21 4 views
0

Dies ist nur eine allgemeine Frage. Ich habe ein paar Implementierungen von Code Art von diesem aber nicht ganz gesehen. So in qt Schöpfer, wenn ich definieren zwei Eigenschaften wie soQt Qml wie vars in js

property int othervar: 3; 
property int val: 1 + othervar; 

dann die Eigenschaft ‚val‘ wird seine Selbst neu bewerten, wenn ‚othervar‘ in keiner Weise verändert wird.

Wenn ich etwas wie das neu schreiben sollte, um in js zu arbeiten, wie könnte ich darüber gehen?

Antwort

0

Benachrichtigungen und Bindungen funktionieren nur für QML-Eigenschaften, eine solche Funktionalität ist in JS nicht verfügbar. Sie können es emulieren, aber es wird einige zusätzliche Syntax benötigen. Es wird nicht elegant und bequem sein.

Während es möglich ist, Signale zu implementieren und sie mithilfe von Setter-Funktionen anstelle des =-Operators zu integrieren, sind die tatsächlichen Bindungsausdrücke schwierig. Dies geschieht automatisch in QML. Wenn Sie dies manuell tun würden, müssten Sie das Benachrichtigungssignal für jeden im jeweiligen Ausdruck verwendeten Wert manuell mit einer Funktion verbinden, die es erneut bewertet. Es wäre ziemlich einfach für triviale Ausdrücke wie in der Frage, aber für etwas Komplexes ist es einfach nicht anwendbar.

Also kurz gesagt:

Wenn ich so etwas wie dies neu schreiben in js zu arbeiten, wie könnte ich über diese gehen?

Sie könnten nicht! Es erfordert Unterstützung auf "Sprachenebene". Solche Dinge sind nicht einmal in Qt aus C++ verfügbar, sie werden von QML unterstützt.

+0

Vielen Dank für Ihre Antwort. Ich habe über Möglichkeiten nachgedacht, wie ich es machen könnte und es würde bedeuten, jedem und jeder Variable ein Pubs und Subs-Objekt zu geben. aber der Teil, der mir nicht sicher ist, ist zwei Dinge. Wenn ich das mit jeder Zeichenfolge, int, bool usw. machen würde, was wäre das für Speicher? wäre es viel zu viel für den js-haufen zu handhaben?und zweitens – TheMan68

+0

, wenn wir eine Variable für zB 'var val1 = val2 initiieren; Ich könnte das Pubs und Subs-Ereignis mit dem Pubs und Subs-Objekt von Val2, um jeden der Abonnenten usw. zu aktualisieren, wenn der Wert geändert wird, aber noch einmal war ich nicht sicher, ob das '=' Zuordnungsereignis Ereignis möglich war zu bekommen auch wenn ich meine eigenen Object.prototypes geschrieben habe. Und schließlich bin ich kein Experte bei weitem. Ich liebe qt und ich möchte etwas Implementierung zum broswer bringen. – TheMan68

+0

@ TheMan68 - Ich bin nicht gerade ein JS Wizz, ich kenne nur ganz einfache Sachen. Vielleicht möchten Sie eine weitere Frage an die JS-Crowd richten. Auch das könnte hilfreich sein: http://stackoverflow.com/questions/23692174/can-i-make-a-variables-value-depend-on-changes-to-another-variable – dtech

0

Wenn Sie dies in einem QtQuick-Kontext tun möchten, haben Sie grundsätzlich zwei Möglichkeiten, damit umzugehen. Die Bindung ist auf Qt bindings documentation page schön erklärt.

  1. Mit einer Eigenschaft "geändert" Signal-Handler

    Item { 
        property int othervar: 3 
    
        onOthervarChanged: { 
         // Update val 
         jsObject.val = 1 + othervar; 
        } 
    } 
    
  2. eine Bindung von Javascript auf einer vorhandenen Eigenschaft

    Item { 
        property int othervar: 3 
        property int val: 0 
    
        Component.onCompleted: { 
         // Create a binding dynamically 
         val = Qt.binding(function() { return 1 + othervar }) 
        } 
    } 
    

Es ist wichtig zu beachten, dass durch die Schaffung, wenn Zuordnung zu einer Eigenschaft, die zuvor eine Bindung hatte, zum Beispiel val = 3, die bestehende Die Bindung wird entfernt und der Wert wird nicht mehr automatisch aktualisiert.

+0

HI gibt es wieder. Tut mir leid, dass ich nicht zu dir zurückgekommen bin. Sie haben meine Frage etwas falsch verstanden. Was ich meine war, wenn ich meine eigene Version in Javascript mit einigen Vars wie diese implementieren wollte, wie könnte dann eine Implementierung aussehen? – TheMan68

+0

für zB: var val = irgendeine Art von Objekt, das seinen eigenen Wert wie qml vars aktualisieren würde – TheMan68