我正在使用John Resig的班级模型(http://ejohn.org/blog/simple-javascript-inheritance/)并提出这个问题:
在下面的课程中,我正在构建一个删除对话框。当按下“是”按钮时,我想执行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 () {}
});
答案 0 :(得分:0)
你做错了。请尝试以下方法:
$('#' + itemId + '-delete-dialog').dialog({
buttons : {
"Yes" : this.handleDeleteItem.bind(this),
"No" : function () {
$(this).dialog("close");
}
}
});
请注意,我已将this.handleDeleteItem()
替换为this.handleDeleteItem.bind(this)
。
this.handleDeleteItem()
时,您正在调用this.handleDeleteItem
并将其返回值指定为“是”的事件侦听器。this.handleDeleteItem.bind(this)
时,您将this.handleDeleteItem
本身指定为“是”的事件侦听器。 .bind(this)
用于确保事件侦听器具有正确的this
指针。