foreach 绑定不为点击应用父上下文

foreach binding doesn't apply parent context for click

因此我的 foreach 绑定按预期工作,除了子元素单击绑定未应用上下文。由于 openFolder 函数在我的 ViewModel 而不是文件夹中,我本来希望必须使用 $parent.openFolder 来访问它,但这不起作用(如果我在没有 $parent 的情况下这样做它会起作用).这是相关代码:

index.html

<ul data-bind="foreach: folders">
    <li>
        <a href="#" data-bind="click: openFolder">  <!-- I would've expected $parent.openFolder here -->
            <span data-bind="text: folderName"></span>
        </a>
    </li>
</ul>

main.js

function Folder(name) {
    this.folderName = ko.observable(name);
}

function MyModel() {
    self.folders = ko.observableArray([]);

    self.openFolder = function() {
        console.log("test");
    }
}

所以我的问题是,为什么点击绑定的上下文没有更改为文件夹上下文?

您忘记申报了 self:

function Folder(name) {
    var self = this;
    self.folderName = ko.observable(name);
}
function MyModel() {
    var self = this;
    self.folders = ko.observableArray([]);
    self.openFolder = function() {
        console.log("test");
    }
}