2017-02-21 10 views
0

Это всего лишь общий вопрос. Я видел несколько реализаций кода вроде этого, но не совсем. Так что в Qt Creator, если я определить два свойства, как такQt Qml like vars in js

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

то свойство «Val» будет повторно оценить его себе, когда «othervar» получает изменен в любом случае.

Если бы я должен был написать что-то подобное, чтобы работать в js, как я могу это сделать?

ответ

0

Уведомления и привязки работают только для свойств QML, в JS нет такой функциональности. Вы можете эмулировать его, но это потребует дополнительного синтаксиса. Он не будет изящным и удобным.

Хотя возможно реализовать сигналы и включить их с помощью функций setter вместо оператора =, фактические выражения привязки будут сложными. Это происходит автоматически в QML, если вы сделаете это вручную, вам придется вручную подключить сигнал уведомления каждого значения, используемого в конкретном выражении, к функции, которая переоценивает ее. Было бы довольно легко для тривиального выражения, как в вопросе, но для чего-либо сложного оно просто неприменимо.

Так короче:

Если бы я был повторно написать что-то вроде этого, чтобы работать в JS, как я мог бы пойти об этом?

Вы не можете! Он требует поддержки на уровне «языка». Такие вещи даже не доступны в Qt от C++, им облегчается QML.

+0

Благодарим вас за ответ. Я думал о том, как это сделать, и это будет означать, что каждый раз меняет пабы и подтипы. но часть, о которой я не уверен, - это две вещи. Если бы я сделал это с каждой строкой, int, bool и т. Д., Что бы это было для памяти? будет ли это способом для обработки кучи js?и во-вторых, – TheMan68

+0

, когда мы инициализируем var для eg'var val1 = val2; я мог бы установить пабы и подсечное событие в пабах и подэлемент val2 для обновления каждого из подписчиков и т. д., когда значение будет изменено, но еще раз я не был уверен, что событие присвоения '=' было возможным для события даже если я написал свои собственные Object.prototypes. И, наконец, im no js expert. Я обожаю qt и им хочется привнести некоторую реализацию в broswer. – 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 там снова. Извините, что я не вернулся к вам. Вы слегка поняли мой вопрос. Что я имел в виду, если бы я хотел реализовать свою собственную версию в javascript с некоторыми такими варами, то какова может быть реализация? – TheMan68

+0

например: var val = некоторый тип объекта, который обновил бы его собственное значение, например qml vars – TheMan68