在QML中定义JavaScript资源#
描述JavaScript文件如何用于QML
QML应用程序的程序逻辑可以用JavaScript定义。JavaScript代码可以定义在QML文档内联,或者分割到JavaScript文件中(在QML中称为 JavaScript 资源
)。
QML支持两种不同类型的JavaScript资源:后置实现文件和共享(库)文件。这两种类型的JavaScript资源都可以由其他JavaScript资源 导入,或者包含在 QML模块 中。
后置实现资源#
大多数导入到QML文档的JavaScript文件都是用于该QML文档的状态实现。在这些情况下,文档中定义的QML对象类型的每个实例都需要一个单独的JavaScript对象和状态的副本,以便正确运行。
导入JavaScript文件时的默认行为是为每个QML组件实例提供一个唯一的、独立的副本。如果该JavaScript文件没有导入任何带有 .import
语句的资源或模块,其代码将在与QML组件实例相同的范围内运行,并因此可以访问和操作在该QML组件中声明的对象和属性。否则,它将拥有自己独特的范围,如果需要,QML组件的对象和属性应作为参数传递给JavaScript文件的函数。
以下是一个后置实现资源的示例
// MyButton.qml import QtQuick 2.0 import "my_button_impl.js" as Logic // A new instance of this JavaScript resource // is loaded for each instance of Button.qml. Rectangle { id: rect width: 200 height: 100 color: "red" MouseArea { id: mousearea anchors.fill: parent onClicked: Logic.onClicked(rect) } }// my_button_impl.js var clickCount = 0; // this state is separate for each instance of MyButton function onClicked(button) { clickCount += 1; if ((clickCount % 5) == 0) { button.color = Qt.rgba(1,0,0,1); } else { button.color = Qt.rgba(0,1,0,1); } }
通常,应该将简单逻辑定义在QML文件中,但更复杂的逻辑应该分离到后置实现资源中,以保持可维护性和可读性。