有些JS文件更像库——它们[…]永远不要直接操作QML组件实例"-中间立场

"Some JS files act more like libraries - they [...] never manipulate QML component instances directly" - middle ground?

本文关键字:组件 实例 QML 操作 quot 中间 文件 JS 它们 永远 有些      更新时间:2023-09-26

引用自在QML中定义JavaScript资源:

一些JavaScript文件的行为更像库——它们提供了一组辅助函数来接受输入和计算输出,但从不直接操作QML组件实例。

如果我想要一个JS文件

  • 操作QML组件实例(作为参数传递给它)
  • 没有得到它的代码和存储的每个QML组件实例导入它的数据的副本?

我可以得到"没有数据存储在每个实例"部分,好吧,不把全局变量在JS文件中。但是,由于某些奇怪的原因,似乎每个实例都存储了"代码"部分的副本。我不知道为什么会这样,但我想知道我是否可以绕过它,以及代价是什么。

我认为你从文档中引用的那行是不正确的,或者至少是措辞很差;您仍然可以拥有一个包含.pragma library的JS文件,并操作作为参数传递给其函数的QML对象。这句话可能指的是上一节

要跨qml文件共享数据,请考虑使用qml Singleton

出于数据共享的目的,我不建议使用.pragma library (@Mitch),原因如下:

  1. .pragma library js在qml对象操作中提供有限的功能。虽然简单的qml对象操作(如属性读/写)可以用.pragma library js完成,它不允许创建/删除qml对象(就像你可以在常规的非库js中一样)。

  2. .pragma library只创建一个实例只是Qt实现中的一个优化。从来没有保证Qt只创建一个实例,也不保证你的数据实际上会被共享。

  3. 嗯,.pragma library从一开始就不是设计来做数据共享工作的。只是,不要尝试这样做。