# JavaScript
JavaScript是Web客户端开发的通用语言;但它也逐渐开始被吸引到Web服务器端开发,这主要归功于node.js。 因此,它非常适合作为一种命令式语言添加到声明性的QML语言方面中。 QML本身作为一种声明性语言,用于表达用户界面的层次结构,但不能体现操作代码。 有时需要一种表达操作的方式,这时JavaScript就派上用场了。
提示
Qt社区中有一个关于在现代的Qt应用程序中正确混合QML/JS/Qt C++的问题。 普遍同意的推荐组合是将应用程序的JS部分限制在最低限度,在Qt C++中执行业务逻辑,在QML/JS中执行UI逻辑。
这本书突破了这个界限,这并不总是适合产品开发的语言组合,也不适合于所有人。 遵循团队技能和个人品味很重要。 如有疑问,请遵循建议。
下面是QML中如何使用JS的简短示例:
Button {
width: 200
height: 300
property bool checked: false
text: "Click to toggle"
// JS function
function doToggle() {
checked = !checked
}
onTriggered: {
// this is also JavaScript
doToggle();
console.log('checked: ' + checked)
}
}
所以JavaScript可以出现在QML中的许多地方:可以作为一个独立的JS函数出现,可以作为一个JS模块出现,也可以出现在每个属性绑定的右侧。
import "util.js" as Util // import a pure JS module
Button {
width: 200
height: width*2 // JS on the right side of property binding
// standalone function (not really useful)
function log(msg) {
console.log("Button> " + msg);
}
onTriggered: {
// this is JavaScript
log();
Qt.quit();
}
}
在QML中声明用户界面,使用JavaScript完成功能。 那么应该写多少JavaScript呢? 这取决于编码者的风格以及对JS开发的熟悉程度。 JS是一种类型松散的语言,因此很难发现类型上的缺陷。 此外,函数需要预估所有参数的变体,这对缺陷的识别非常令人讨厌。 发现缺陷的方法是严格的单元测试或验收测试。 因此,如果在JS中开发真正的逻辑(而不是粘合一些代码行),应该真正开始使用测试驱动开发的方法。 在一般混合团队(Qt/C++和QML/JS)中,当他们将前端中的JS数量最小化为领域逻辑并在后端使用Qt C++完成繁重的工作时,他们会非常成功。 然后后端应该经过严格的单元测试,以便前端开发人员可以信任代码并专注于所有这些小的用户界面的需求。
提示
一般来说:后端开发人员是功能驱动的,前端开发人员是用户故事驱动的。