You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从独立JavaScript(.js)文件访问QML Singleton单例

问题根因

你在JS文件中通过.import导入的是单例所属的模块命名空间,不是单例实例本身,所以直接访问TC.myWidth会返回undefined。QML文件中导入模块后,QML引擎会自动将单例实例注入到当前作用域,所以可以直接访问TrConfig.myWidth,但JS文件的导入逻辑没有这个自动注入特性。

解决方案1:调整JS中的属性访问路径

直接修改myjslib.js的属性访问写法,从模块命名空间下取单例实例再访问属性:

// myjslib.js
.import QtQml 2.11 as QtQml
.import TrConfig as TC

// 可选:提前绑定单例别名,后续直接用TrConfig访问
const TrConfig = TC.TrConfig

function myfunc() {
  // 写法1:直接从命名空间下访问
  console.log("In myjslib.js myWidth is " + TC.TrConfig.myWidth); 
  // 写法2:用提前绑定的别名访问
  console.log("In myjslib.js myWidth is " + TrConfig.myWidth); 
}

修改后运行即可正常输出234。

解决方案2:将单例作为参数传递到JS函数

如果不想修改JS文件的导入逻辑,也可以在QML调用JS函数时,把单例实例当参数传入:

// myjslib.js
function myfunc(TrConfig) {
  console.log("In myjslib.js myWidth is " + TrConfig.myWidth); 
}

QML侧调用时传参:

Component.onCompleted: {
    console.log("Foo onCompleted: myWidth="+TrConfig.myWidth);
    J.myfunc(TrConfig); // 传入单例实例
}

内容的提问来源于stack exchange,提问作者jimav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 03:54:03