2017-02-21 41 views
0

這只是一個普遍的問題。 我已經看到了一些這樣的代碼類實現,但不完全。 所以在Qt Creator中,如果我定義兩個屬性,像這樣Qt Qml像js中的變種

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

那麼當「othervar」以任何方式被更改屬性「VAL」將重新評估自身。

如果我要重寫這樣的東西在js中工作,我該怎麼辦?

回答

0

通知和綁定僅適用於QML屬性,JS中沒有這樣的功能。你可以模擬它,但它會需要一些額外的語法。它不會優雅和方便。

儘管可以實現信號並通過使用setter函數而不是=運算符來合併它們,但實際的綁定表達式將會非常棘手。這會在QML中自動發生,如果您手動執行此操作,則必須手動將特定表達式中使用的每個值的通知信號連接到重新評估它的函數。對於像問題這樣微不足道的表達式來說,這將是相當容易的,但對於任何複雜的事物來說,它都是不適用的。

因此,在短期:

如果我重新寫這樣的事在JS我怎麼可能會去 這個工作?

你可能不會!它需要「語言」級別的支持。 Qt在C++中甚至沒有這樣的東西,它們是由QML提供的。

+0

謝謝你的回答。我想到了我可以做到的方式,這意味着給予每個酒吧和潛艇對象不斷變化。但我不確定的部分是兩件事。如果我用每個字符串,int,bool等來做那些對於內存來說會是什麼樣的東西? js堆能夠處理多少?其次是 – TheMan68

+0

,當我們爲eg'var val1 = val2;我可以設置pubs和subs事件,在val2的pubs和subs對象中更新每個訂閱者等,當值被更改時,但我再次不確定'='賦值事件是否可能獲得事件即使我寫了自己的Object.prototypes。最後,我還沒有到目前爲止的專家。我喜歡qt,並且我想要把一些實現帶到大巴。 – TheMan68

+0

@ TheMan68 - 我自己並不完全是JS,我只知道非常基本的東西。你可能想問另一個針對JS人羣的問題。這也許是有幫助的:http://stackoverflow.com/questions/23692174/can-i-make-a-variables-value-depend-on-changes-to-another-variable – dtech

0

如果你想在QtQuick上下文中這樣做,你基本上有兩種方法來處理它。綁定在Qt bindings documentation page上很好地解釋。

  1. 隨着財產 「改爲」 信號處理器

    Item { 
        property int othervar: 3 
    
        onOthervarChanged: { 
         // Update val 
         jsObject.val = 1 + othervar; 
        } 
    } 
    
  2. 通過在現有的財產創建從Javascript綁定

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

要注意的是,當它是非常重要的分配給之前具有約束力的財產,例如通過做val = 3,現有的綁定被移除,並且該值將不再被自動更新。

+0

HI there again。對不起,我還沒有回到你身邊。 你有點誤解我的問題。 我的意思是如果我想用JavaScript來實現我自己的JavaScript版本,那麼實現是什麼樣的? – TheMan68

+0

例如:var val =某種類型的對象,它會更新自己的值,如qml vars – TheMan68