Knockout.js 事件函数不工作

Knockout.js 事件函数不工作,knockout.js,Knockout.js,我有一个绑定到事件函数的按钮: deleteWrapper: function(data, event) { var self = this; var clickedId = event.target.getAttribute('data-wrapper'); }, 删除 在js文件(使用jQuery和Knockout编写)中,我有一个如下的可观察变量: isChecked: ko.observable(false) <button type="button" dat

我有一个绑定到事件函数的按钮:

deleteWrapper: function(data, event) {
    var self = this;
    var clickedId = event.target.getAttribute('data-wrapper');
},
删除
在js文件(使用jQuery和Knockout编写)中,我有一个如下的可观察变量:

isChecked: ko.observable(false)
<button type="button" data-bind="click: deleteWrapper
deleteWrapper: function(data) {
    /* data is the data bound to the button */
    var clickedId = data.wrapper_id;
},
以及
deleteWrapper
函数:

deleteWrapper: function(data, event) {
    var self = this;
    var clickedId = event.target.getAttribute('data-wrapper');
},
当我提示出
clickedId
或任意字符串时,这没关系,但当我要提示
的值时,会选中

alert(self.isChecked());

它没有显示任何东西。我尝试了other
observable
observableArray
,但也没有成功。然而,当我在其他函数中尝试完全相同的方法时,它成功了。事件函数是否有问题?

在ko中,您可以使用直接将单击事件附加到函数,如下所示:

isChecked: ko.observable(false)
<button type="button" data-bind="click: deleteWrapper
deleteWrapper: function(data) {
    /* data is the data bound to the button */
    var clickedId = data.wrapper_id;
},
我不知道您想用
deleteWrapper
函数做什么,但是您可以直接从接收到的参数访问绑定数据,如上所示


我也不知道您试图在何处运行此代码:
alert(self.isChecked())self
确实是
isChecked()
所属的对象,那么这应该是可行的。

Yikes!不要把Knockout和jQuery混为一谈。Knockout是一个MVVM库,您不需要jQuery和
data-
这样的属性

以下是如何在淘汰赛中做到这一点:

var item1={name:“Item ONE”,被选中:ko.observable(false)};
var item2={name:“Item 2”,被选中:ko.observable(true)};
var item3={name:“Item 3”,被选中:ko.observable(false)};
var rootViewModel={
项目:ko.observableArray([项目1、项目2、项目3])
};
rootViewModel.deleteWrapper=函数(项){
警报(item.isChecked());
rootViewModel.items.remove(item);
};
应用绑定(rootViewModel)

  • 删除

我使用ObservateArray的
删除方法简化了JotaBe的第二个解决方案

var item1={wrapper_id:1,name:“Item ONE”,isChecked:ko.observable(false)};
var item2={wrapper_id:2,name:“Item TWO”,isChecked:ko.observable(true)};
var item3={wrapper_id:3,name:“Item THREE”,isChecked:ko.observable(false)};
var rootViewModel={
项目:ko.observableArray([项目1、项目2、项目3])
};
rootViewModel.deleteWrapper=函数(数据){
rootViewModel.items.remove(数据);
};
应用绑定(rootViewModel)

  • 删除

但是你能告诉我代码是在哪里定义的吗?@LoïcFaure Lacroix:It's
isChecked:ko.observable(false)
。这种语法可能看起来很奇怪,因为我的代码是为MagentoWith
var self=This编写的
在您的
deleteWrapper
中,您正在隐藏在函数外部声明的
self
。只需删除
var self=this
警报(self.isChecked())应该可以。谢谢,我看看是否可以out@HauPham我理解,但为了使其工作,您必须确保isChecked正确地绑定到事件处理程序所使用的同一视图模型。现在还不清楚事情是如何联系在一起的。郝凡,我已经回答了你的问题,尽管有缺失的信息。如果你想在看到我的答案后澄清其他问题,请编辑你的问题并给我留下评论,这样我可以改进我的答案。问题应该包括理解和再现问题所需的全部代码。例如,说“当我提示clickedId或任意字符串时,这没关系,但当我想提示isChecked的值时……”没有任何意义,除非你显示相关代码,例如,这是在哪里完成的?谢谢,顺便说一下,$确实是一个输入错误