Javascript类模型:从对话框定义调用类函数

时间:2013-09-28 01:02:20

标签: javascript

我正在使用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 () {}
});

1 个答案:

答案 0 :(得分:0)

你做错了。请尝试以下方法:

$('#' + itemId + '-delete-dialog').dialog({
    buttons : {
        "Yes" : this.handleDeleteItem.bind(this),
        "No" : function () {
            $(this).dialog("close");
        }
    }
});

请注意,我已将this.handleDeleteItem()替换为this.handleDeleteItem.bind(this)

  1. 执行this.handleDeleteItem()时,您正在调用this.handleDeleteItem并将其返回值指定为“是”的事件侦听器。
  2. 执行this.handleDeleteItem.bind(this)时,您将this.handleDeleteItem本身指定为“是”的事件侦听器。 .bind(this)用于确保事件侦听器具有正确的this指针。