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

JS函数传参在QML调用时出现ReferenceError错误求助

解决QML中JS函数传参访问对象属性的问题

嘿,我来帮你搞定这个问题!你遇到的两个核心问题都是JavaScript对象属性访问和参数传递的细节问题,咱们一步步拆解解决:

1. 对象属性访问方式错误

你把固定属性名trip_time改成参数column后,依然用了点语法(listModel.get(i).column),这是关键bug!

在JS里,点语法后面的内容会被当作字面量属性名——也就是说,代码会去寻找名为column的属性,而不是你传入的参数值(比如trip_time)。要通过变量动态访问属性,必须用方括号语法:

修改后的完整函数代码:

function sum(column) { 
    var res = 0; 
    var res1 = 0; 
    var result = 0; 
    for(var i = 0; i < listModel.count; i++){ 
        res += parseFloat(listModel.get(i)[column]); // 改用方括号访问动态属性
    } 
    for(var i1 = 0; i1 < listView.currentRow; i1++){ 
        res1 += parseFloat(listModel.get(i1)[column]); // 这里同样修改
    } 
    result = res - res1; 
    return result; 
}

2. 函数调用时的参数传递错误

你调用JS.sum(trip_time)时,没有给trip_time加引号,JS会把它当作一个变量解析,但你并没有定义过名为trip_time的变量,所以才抛出ReferenceError。

你需要传递的是属性名字符串,所以调用时要加引号:

JS.sum("trip_time")

为什么之前的hourtodec函数没问题?

对比你之前的hourtodec函数:

function hourtodec(hour) { 
    var res = hour.split(":") 
    var hours = parseInt(res[0]); 
    var minutes = parseInt(res[1]); 
    var dec = hours + minutes/60; 
    return dec; 
}

这个函数的参数hour是接收一个字符串值(比如调用时传"12:30"),不需要动态访问对象属性,所以点语法和参数传递逻辑都没问题,和这次的场景完全不同哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:05:49