jsrender 支持将数组作为参数传入自定义 helper 函数,但需注意模板作用域(view hierarchy)导致的上下文丢失问题;关键在于通过 contextual parameter(如 `~plantlist=plantlist`)显式提升父级数据,而非直接引用未声明的变量。
在 JsRender 中,数组完全可以作为参数传递给 helper 函数,问题不在于“是否支持”,而在于模板中如何正确访问嵌套层级下的数据。你遇到的 plantArray 参数为 undefined,根本原因并非 JsRender 限制,而是 view 作用域链中断:当使用 {{for selectedplants}} 迭代时,子 view 的数据上下文(#data)自动切换为当前 selectedplants 的元素(如 “PlantCode2″),此时 plantlist 已不在该子 view 的数据对象中——它属于父 view 的 data 对象。
✅ 正确做法:使用 Contextual Parameter 提升父级数据
你需要在 {{for}} 标签中显式声明一个 contextual parameter,将父级的 plantlist 数组“注入”到子 view 作用域中:
? 说明: ~plantlist=plantlist 表示:在当前 for 块内创建一个名为 ~plantlist 的上下文变量,其值取自父 view 数据上下文中的 plantlist 属性; #data 即当前迭代项(如 “PlantCode2″),无需额外 itemVar; ~plantlist 在 helper 内即可被正常接收为数组类型(Array.isArray(plantArray) === true)。
✅ Helper 函数优化建议(健壮性增强)
原始 helper 存在潜在错误风险(如 find() 返回 undefined 时调用 .PlantName 会报错),推荐增强容错逻辑: