Knockout VIewModel触发foreach内部的函数
Knockout VIewModel triggers function inside foreach
我正在与一个奇怪的问题作斗争,我的想法已经用完了。
问题是,我的视图模型在点击时触发了foreach内部的功能。所以在这种情况下,如果我点击div menuConnections,测试调用函数就会被触发。即使我向testcall发送其他值(例如div id),当我单击menuConnections时,也会发送相同的值。
如何停止此操作并强制测试调用仅在我单击TheDivWhoCalls时执行?
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>
如果没有看到ko.applyBindings
的实际运行示例,我无法确定,但请尝试更改
data-bind='click: $root.testcall("asd")
至
data-bind='click: $parent.testcall.bind($parent, "asd")
说明:
首先,我将$root
更改为$parent
。我不知道你的$root
是什么,但可以放心地假设你的$parent
是使用testcall
方法的VM。
更重要的是,click:
期望一个函数,但$root.testcall("asd")
调用返回undefined
的函数。相反,我们使用Function.prototype.bind
从testcall
创建一个新函数,参数设置为"asd"
,this
设置为$parent
您可能需要使用绑定语法。尝试data-bind="$root.testcall.bind($data, 'asd')"
相关文章:
- 调用函数内部的函数
- javascript函数内部的代码用逗号而不是分号分隔
- javascript无法重新定义函数内部的全局对象
- 如何从函数内部的这个变量中获取值
- appendChild在函数外部工作,但在函数内部不工作
- 在jquery函数内部设置来自jquery函数的var;t运行
- 一个'var'在函数内部声明
- 为什么(如何)'这'从函数内部调用回调时发生更改
- 函数内部未定义的输入值
- 在Meteor中如何将数据从函数内部复制到其他模板
- 如果在构造函数内部为else,则Javascript是可选的
- 我对“;返回true"嵌套函数内部;t工作
- jQuery 无法使用 AJAX 调用访问函数内部的函数参数
- javascript,将参数传递给函数内部的闭包中的回调
- 匿名自执行js函数内部的全局变量在外部仍然可用
- 使用PHP和Javascript在函数内部传递alphaneumeric值作为参数时出错
- 访问函数内部的Polymer方法
- 更改函数内部的全局变量而不调用它
- 如何在函数内部为jquery工具提示调用不同的var字符串
- 构造函数内部的事件处理