如何在单独的文件中定义js函数,并将其附加到QML元素

时间:2013-11-10 09:45:40

标签: qt qml qtquick2

我可以这样做:

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

OtherElement{
     property int whatever: something.someFunction()

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

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

2 个答案:

答案 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) }
}

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