Если у меня есть некоторый код JS в виде текста, и я вызываю его в eval()
, я могу использовать функции, определенные этим оператором, только в области, в которой произошло eval(). Насколько я могу судить, это означает, что любые новые определения JS, созданные из eval, невидимы для остальной части QML. Рассмотрим этот обработчик сигналов QML:
Item {
id: testitem
onThesourceChanged: {
eval(thesource)
testfunction()
}
}
testfunction()
был определен в тексте «источник» и действительно работает в обработчике сигнала выше, выводя некоторый тестовый текст; но он не входит в область действия элемента QML и, насколько я понимаю, не может быть вызван снова. Я пробовал различные идеи, такие как размещение eval()
в функции или внутри Component.onCompleted
и т. д., но я не могу понять, как заставить что-либо, созданное eval()
, распознаваться как часть родительского элемента QML.
Например, я хочу иметь возможность вызывать testitem.testfunction()
, но он не определен вне области действия этого обработчика.
import
, потому что он загружает JS только один раз, и я хочу перезагрузить файл JS во время работы приложения, поэтому мне нуженeval
- person John Vitornio   schedule 05.05.2014testitem
и не пересчитывать при необходимости? - person MadeOfAir   schedule 05.05.2014eval
должен быть где-то, и если он находится в функции, то оценка ограничена областью действия этой функции. - person John Vitornio   schedule 05.05.2014