敲除 JS foreach 作为函数的输入

Knockout JS foreach as input of function

有没有办法将foreach 中的数据用作单独函数的输入?我不想使用图像源,而是想将其留空并在出错时调用一个函数,这将允许我操作 SVG。我的图片目前采用以下格式:

<img src='' onerror=myFunction(imgUrl)></img>

但是我希望能够做这样的事情:

<div data-bind='foreach: arrayValue'>
    <div>
      <p data-bind='text: $data.name'></p>
      <img src='' data-bind='onerror: myFunction($data.img)'></img>
    </div>
</div>

JS

function myFunction(img){
    do something...
}

var myObjArr = [
    {name: 'entry 1', img: imageUrl}, {name:'entry 2', img: image2Url},...
]

var model = function() {
    this.self = this;
    this.arrayValue = ko.observable(myObjArr);
}
ko.applyBindings(new model());

是的,为此存在 event 绑定。在 foreach 循环中,KO 会自动将当前项作为参数传递给函数。请注意,由于 KO 处理绑定上下文的方式,从循环内部引用视图模型上的函数时必须使用 $parent

<div data-bind='foreach: item'>
    <div>
      <p data-bind='text: $data.name'></p>
      <img src='' data-bind='event: { error: $parent.errorHandler }'></img>
    </div>
</div>

JS:

var model = function() {
    var self = this;
    self.item = ko.observableArray([
        {name: 'entry 1', img: imageUrl}, {name:'entry 2', img: image2Url},...
    ]);
    self.errorHandler = function(item) {
        // 'item' will be an object from the self.item array
        // So you can use item.img, item.name, etc.
    }
}