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
相关产品推荐
相关产品推荐

