Javascript类模型:从对话框定义调用类函数
我使用的是John Resig的类模型(),有一个问题: 在下面的类中,我正在构建一个删除对话框。当按下“是”按钮时,我想执行Javascript类模型:从对话框定义调用类函数,javascript,Javascript,我使用的是John Resig的类模型(),有一个问题: 在下面的类中,我正在构建一个删除对话框。当按下“是”按钮时,我想执行handleDeleteItem功能。我该怎么做?我不能使用“this.handleDeleteItem”,因为“this”指的是对话框 var bItem = Class.extend({ init: function (type) { this.id = type + "-" + getNewId(); }, registerD
handleDeleteItem
功能。我该怎么做?我不能使用“this.handleDeleteItem”,因为“this”指的是对话框
var bItem = Class.extend({
init: function (type) {
this.id = type + "-" + getNewId();
},
registerDelete: function () {
var itemId = this.id;
// Build Delete Dialog
var deleteDialog = '<div id="' + itemId + '-delete-dialog" title="Delete Item?"><p><br/><span class="ui-icon ui-icon-alert" style="float: left; margin: 0 7px 20px 0;"></span>Are you sure you want to delete this item?</p></div>';
// Append dialog
$('#b-main').append(deleteDialog);
// Confirmation dialog
$('#' + itemId + '-delete-dialog').dialog({
buttons : {
"Yes" : this.handleDeleteItem(),
"No" : function () {
$(this).dialog("close");
}
}
});
$("#dialog").dialog("open");
},
handleDeleteItem: function () {}
});
var bItem=Class.extend({
init:函数(类型){
this.id=type+“-”+getNewId();
},
registerDelete:函数(){
var itemId=this.id;
//生成删除对话框
var deleteDialog='
是否确实要删除此项目?;
//附加对话框
$('#b-main').append(deleteDialog);
//确认对话框
$(“#”+itemId+'-delete dialog')。对话框({
按钮:{
“是”:this.handleDeleteItem(),
“否”:函数(){
$(此).dialog(“关闭”);
}
}
});
$(“对话框”)。对话框(“打开”);
},
handleDeleteItem:函数(){}
});
你做错了。请尝试以下操作:
$('#' + itemId + '-delete-dialog').dialog({
buttons : {
"Yes" : this.handleDeleteItem.bind(this),
"No" : function () {
$(this).dialog("close");
}
}
});
请注意,我将this.handledeletitem()
替换为this.handledeletitem.bind(this)
this.handleDeleteItem()
时,您正在调用this.handleDeleteItem
,并将其返回值指定为“Yes”的事件侦听器this.handleDeleteItem.bind(this)
时,您将this.handleDeleteItem
本身指定为“是”的事件侦听器。.bind(this)
用于确保事件侦听器具有正确的this
指针那么,如果
this.handledeletietem
未解析,那么bItem.handledeletietem
可以吗?无论哪种方式,.handleDeleteItem()
都返回未定义,这意味着您实际上将“Yes”绑定为nothing。感谢您的回复。但问题是我不能调用this.handleDeleteItem.bind(this),因为第一个“this”指向对话框,因此找不到函数定义。@user998066为什么this
指向对话框?它在registerDelete
的范围内进行评估。因此,此
将指向实例,而不是对话框。在我看来,this.handledeletietem.bind(this)应该可以正常工作。试试看。我意识到我在一个click()函数定义中调用了'this.handleDeteItem:$('#'+itemId.click(function(){…});我最终为对象定义了一个变量来保存对它的引用,然后调用该变量的函数,例如var myItem=this;之后:myItem.handleDeleteItem();