我正在与奇怪的问题作斗争,我的想法已经不多了。
问题是我的视图模型在点击时触发foreach内部的功能。所以在这种情况下,如果我点击div menuConnections测试调用功能正在被触发。即使我向testcall发送其他值(例如div id),当我点击menuConnections时也会发送相同的值。
如何停止此操作并仅在我点击TheDivWhoCalls时强制执行testcall?
function ProfileViewModel(userId) {
var self = this;
self.connectionRequests = ko.observableArray();
self.getConnections = function () {
$("#menuConnections").css({ "display": "block" });
//other code which returns data
};
self.testcall = function(data) {
alert(target);
};;
}
<div id="menuConnections" data-bind='click: getConnections'>Connections</div>
<div id="connections" style="display: none">
<div data-bind="foreach: connectionRequests">
<div id="TheDivWhoCalls" data-bind='click: $root.testcall("asd")'><img src="~/Resources/Images/yesIcon.png" /></div>
</div>
</div>
答案 0 :(得分:2)
我无法通过ko.applyBindings
看到实际运行的示例,但尝试更改
data-bind='click: $root.testcall("asd")
到
data-bind='click: $parent.testcall.bind($parent, "asd")
说明:
首先我将$root
更改为$parent
。我不知道您的$root
是什么,但可以安全地假设您的$parent
是使用testcall
方法的虚拟机。
更重要的是,click:
期望一个函数,但$root.testcall("asd")
调用返回undefined
的函数。相反,我们使用Function.prototype.bind
从testcall
创建一个新功能,参数设置为"asd"
,this
设置为$parent
答案 1 :(得分:0)
您可能需要使用绑定语法。试试data-bind="$root.testcall.bind($data, 'asd')"