javascript - 绑定(bind)到 foreach 中的单击操作的函数未被调用

标签 javascript knockout.js

我无法将我的点击操作绑定(bind)到 View 模型函数以从数组中删除项目(在 foreach 绑定(bind)中)

我有以下 View 模型

var FileGroupViewModel = function () {
    var self = this;

    self.files = ko.observableArray();

    self.removeFile = function (item) {
        self.files.remove(item);
    }

    self.fileUpload = function (data, e) {
        var file = e.target.files[0];

        self.files.push(file);
    };
}

var ViewModel = function () {
    var self = this;

    self.FileGroup = ko.observableArray();

    self.FileGroup1 = new FileGroupViewModel();
    self.FileGroup2 = new FileGroupViewModel();
    self.FileGroup3 = new FileGroupViewModel();


    self.uploadFiles = function () {
        alert("Uploading");
    }
}

var viewModel = new ViewModel();

ko.applyBindings(viewModel);

我的 View 基本上列出了 3 个“组”按钮,用户可以在其中选择要上传的文件

下面的一切都按预期工作,除了 $parent.removeFile 没有删除文件:

<div class="row files">
    <h2>Files 1</h2>
    <span class="btn btn-default btn-file">
        Browse  <input data-bind="event: {change: FileGroup1.fileUpload}" type="file" />
    </span>

    <br />
    <div class="fileList" data-bind="foreach: FileGroup1.files">
        <span data-bind="text: name"></span>
        <a href="#" data-bind="click: $parent.removeFile">Remove</a>
        <br />
    </div>
</div>

fiddle https://jsfiddle.net/alexjamesbrown/aw0798p7/

我做错了吗 $parent.removeFile - 似乎这不会在点击时被调用?

这是一个简化的工作示例,不是成品!

最佳答案

你误解了 $parent。它带你离开一个上下文级别。您的 foreach 使用 FileGroup1.files 作为其索引,因此您可能认为 $parent 级别将是 Filegroup1 ,但事实并非如此。它是顶级 View 模型,因为它是 foreach 之外的上下文。

所以你的click绑定(bind)应该是

click: $parent.FileGroup1.removeFile

关于javascript - 绑定(bind)到 foreach 中的单击操作的函数未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33392198/

相关文章:

javascript - 在javascript中关闭父窗口时如何关闭子窗口?

javascript - Angular 为什么 $event 对象更改属性

javascript - 使用 observableArray 来切换点击绑定(bind)的值

javascript - 使用 knockout.js 根据选择下拉菜单切换按钮状态

knockout.js - aurelia.js - 自定义绑定(bind)引擎?

knockout.js - 无法从 knockout 框架中的输入元素取消绑定(bind)事件

javascript - 什么是 "auto-casting bool"?

javascript - 当我有这么多页面要分页时,如何处理分页?

javascript - Persistence.js 在两个方向上添加多对多

javascript - AJAX 不适用于 Knockout.JS