0

引用在 QML 中定义 JavaScript 资源

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

如果我想要一个同时满足以下条件的 JS 文件怎么办:

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

我可以通过不将全局变量放在 JS 文件中来获得“没有数据存储在每个实例上”的部分。但是,出于某种奇怪的原因,似乎也为每个实例存储了“代码”部分的副本。我不明白为什么会这样,但我想知道我是否可以绕过它,以及以什么代价。

4

2 回答 2

2

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

于 2016-09-14T19:09:53.543 回答
1

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

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

  1. .pragma libraryNode.js在 qml 对象操作中提供了有限的功能。虽然可以使用.pragma libraryjs 完成简单的 qml 对象操作(如属性读取/写入),但它不允许创建/删除 qml 对象(就像在常规的非库 js 中一样)。当您的应用程序变得动态时,它会很糟糕。

  2. .pragma library只创建一个实例只是 Qt 实现中的一种优化。永远不能保证 Qt 会创建一个实例,也不能保证您的数据实际上会被共享。

  3. 好吧,.pragma library从一开始就不是为了做数据共享工作而设计的。只是,不要试图这样做。

于 2016-09-19T12:02:16.267 回答