我可以这样做:
SomeElement{
id: something
function someFunction(){...}
....
OtherElement{
property int whatever: something.someFunction()
但是,我希望我的所有JS函数都在一个单独的文件中定义。问题是,就我所知,这会将函数与附加到任何一个元素的函数分离。我不能再将一个函数称为另一个元素上的属性来调用它。
是否可以将函数附加到QML元素但仍然在另一个文件中定义它?是否有一些语法可以从元素中“转发”或“别名”函数,因此仍然可以在元素上调用此“成员函数”,因此该函数可以访问其父元素上的其他属性?
答案 0 :(得分:0)
您可以尝试将js文件作为某个模块导入,并将其功能与模块名称前缀一起使用。因此,它们将与您的QML对象的函数分开“命名空间”
有关它的文档:http://qt-project.org/doc/qt-5.0/qtqml/qtqml-javascript-imports.html
答案 1 :(得分: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) }
}
这样,您可以通过简单的包装器将函数附加到不同的对象。