"Some JS files act more like libraries - they [...] never manipulate QML component instances directly" - 中间立场?

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

引自Defining JavaScript Resources In QML

Some JavaScript files act more like libraries - they provide a set of helper functions that take input and compute output, but never manipulate QML component instances directly.

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

我可以得到 "no data stored on every instance" 部分,好吧,不把全局变量放在 JS 文件中。但是,由于某些奇怪的原因,似乎也为每个实例存储了 "code" 部分的副本。我不明白为什么会这样,但我想知道我是否可以规避它,需要付出什么代价。

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

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

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

  1. .pragma library js 在 qml 对象操作中提供有限的 功能。虽然简单的 qml 对象操作(如 属性 reading/writing)可以用 .pragma library js 完成,它不允许 creating/deleting qml 对象(就像在常规的非库 js 中一样)。当您的应用程序变得动态时,它会很糟糕。

  2. .pragma library 只创建一个实例只是 Qt 实现中的一种优化。 从不保证 Qt 只会创建一个实例,也不会真正共享您的数据。

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