我是KnocoutJs的新手。任何帮助深表感谢。 我想在点击div时调用函数,并且应该在计算函数内调用相同的函数。以下是我的功能。
DetailViewModel.prototype.DisplayChange = function (name) {
this.currentSelection(name);
switch (this.currentSelection()) {
case "abc":
{
this.abc();
break;
}
case "xyz":
{
this.showxyz();
break;
}
}
};
我在点击.cshtml文件和计算机内部函数时调用此函数。
<div class ="TestTabs" data-bind="foreach: availableTabs">
<div class="Tab-ListItem"
data-bind="text: $data, click: $parent.DisplayChange.bind($parent),
css : {tabSelected : $parent.currentSelection() == $data}">
</div>
</div>
我的计算:
this.selectedData = ko.computed(function () {
return _this.compselectedData();
});
public compselectedData(): {
this.DisplayChange(this.currentSelection())
}
即使我在点击时调用DisplayChange(),它也会在compselectedData()内部触发。 如何停止点击计算功能?
答案 0 :(得分:1)
你有一个无限循环:
为了打破循环,我建议如下:
在click事件上,更改currentSelection observable而不是调用DisplayChange函数:
<div class ="TestTabs" data-bind="foreach: availableTabs">
<div class="Tab-ListItem"
data-bind="text: $data, click: $parent.currentSelection($data),
css : {tabSelected : $parent.currentSelection() == $data}">
</div>
</div>
不要更改DisplayChange函数中的observable:
DetailViewModel.prototype.DisplayChange = function (name) {
switch (this.currentSelection()) {
case "abc":
{
this.abc();
break;
}
case "xyz":
{
this.showxyz();
break;
}
}
};
这就是淘汰赛之美,你只改变模型,视图会自动更新。