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");
}
}
因此我的 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");
}
}