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