5

我可以做这个:

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

OtherElement{
     property int whatever: something.someFunction()

但是,我希望我的所有 JS 函数都定义在一个单独的文件中。问题在于,据我所知,这将函数与附加到任何一个元素上分离。我不能再将函数作为另一个元素上的属性来调用它。

是否可以将函数附加到 QML 元素但仍将其定义在另一个文件中?是否有一些语法可以从元素中“转发”或“别名”函数,以便仍然可以在元素上调用此“成员函数”,因此该函数可以访问其父元素上的其他属性?

4

2 回答 2

0

您可以尝试将 js 文件作为某个模块导入,并使用带有模块名称前缀的功能。因此,它们将位于与 QML 对象的函数不同的“命名空间”中

关于它的文档:http: //qt-project.org/doc/qt-5.0/qtqml/qtqml-javascript-imports.html

于 2013-11-10T11:17:11.043 回答
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) }
}

这样,您可以通过简单的包装器将函数附加到不同的对象。

于 2017-08-23T19:31:49.077 回答