2013-11-10 2 views
3

я могу это сделать:Как и определить функцию JS в отдельном файле еще прикрепить его к элементу QML

SomeElement{ 
    id: something 
    function someFunction(){...} 
.... 

OtherElement{ 
    property int whatever: something.someFunction() 

Однако, я хотел бы все мои JS функции, определенные в отдельном файле. Проблема в том, что это отделяет функции от привязки к любому одному элементу, насколько я могу судить. Я больше не могу ссылаться на функцию как свойство на другой элемент для ее вызова.

Возможно ли, чтобы функция была присоединена к элементу QML, но все еще определена в другом файле? Был бы некоторый синтаксис для «переадресации» или «псевдонима» функции из элемента, чтобы можно было все-таки вызвать эту «функцию-член» в элементе, и, таким образом, эта функция могла бы иметь доступ к другим свойствам в своем родительском элементе?

+2

Я не думаю, что в настоящее время это возможно сделать сейчас. Вам либо нужно добавить оболочку в компонент для вашей функции, либо сохранить функцию в вашем файле QML. – koopajah

ответ

0

Вы можете попробовать импортировать js-файл в качестве некоторого модуля и использовать его функцию с префиксом имени модуля. Таким образом, они будут находиться в отдельном «пространства имен» от вас QML функции объекта

Документации об этом: http://qt-project.org/doc/qt-5.0/qtqml/qtqml-javascript-imports.html

+0

Да, но это не позволит вызывать функцию вне компонента, как если бы она была функцией самого компонента. – koopajah

0

Возможно ли функция быть присоединена к элементу QML но до сих пор он определен в другой файл? Был бы некоторый синтаксис для «вперед» или «псевдоним» функции от элемента, чтобы можно было все еще назвать эту «функцию-член» для элемента, и, таким образом, эта функция сможет иметь доступ к другим свойствам своего родительского элемента ?

Не прямо, но легко поддельное состояние:

// foo.js 
function printDimensions(item) { 
    console.log(item.width, "x", item.height) 
} 

// in qml 
import "foo.js" as Foo 
// .. 
Item { 
    id: someItem 
    function printDimensions() { Foo.printDimensions(someItem) } 
} 
// .. 
Rectangle { 
    id: anotherItem 
    function printDimensions() { Foo.printDimensions(anotherItem) } 
} 

Таким образом, вы можете прикрепить функцию к различным объектам с помощью простой обертки.