You need to enable JavaScript to run this app. Knockout JS中如何将foreach遍历数据作为独立函数的入参使用
优惠活动
大模型
产品
解决方案
定价
更多

Knockout JS中如何将foreach遍历数据作为独立函数的入参使用

解决方案

核心修正逻辑如下:

  • Knockout 没有内置直接绑定原生事件名的语法,所有DOM事件绑定都需要通过官方提供的event绑定器实现
  • 直接在绑定中写函数调用会在页面初始化绑定阶段就执行逻辑,需要套一层匿名函数,才能实现事件触发时再执行并传参的效果

第一种方案(沿用你现有的全局myFunction)

直接修改img标签的绑定逻辑即可:

<div data-bind='foreach: arrayValue'>
    <div>
      <p data-bind='text: $data.name'></p>
      <img src='' data-bind='event: { error: function() { myFunction($data.img) } }'></img>
    </div>
</div>

如果需要兼容保留error事件的默认行为,在匿名函数最后返回true即可:function() { myFunction($data.img); return true; }

第二种方案(更符合Knockout MVVM规范,避免全局函数污染)

把处理函数挂载到ViewModel上,修改后的JS代码如下:

var myObjArr = [
    {name: 'entry 1', img: imageUrl}, {name:'entry 2', img: image2Url},
    // 其余数据项
]

var model = function() {
    const self = this;
    self.arrayValue = ko.observable(myObjArr);
    // 图片错误处理逻辑挪到ViewModel内
    self.handleSvgError = function(imgUrl) {
        // 原myFunction的逻辑写在这里
        // do something...
        return true; // 可选,保留事件默认行为
    }
}
ko.applyBindings(new model());

对应的HTML绑定逻辑:

<div data-bind='foreach: arrayValue'>
    <div>
      <p data-bind='text: $data.name'></p>
      <!-- foreach内调用父级ViewModel的方法用$parent访问 -->
      <img src='' data-bind='event: { error: () => $parent.handleSvgError($data.img) }'></img>
    </div>
</div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 07:24:03