'functionInBackboneView' 不是函数 - Jquery 中的上下文

'functionInBackboneView' is not a function - context in Jquery

我有一个 Backbone 视图,我在其中将 droppable 设置为一个元素。我想访问 'outer' addOperator 方法,但是如何访问?它给出了一个错误,说它不是一个函数。

var CanvasView = Backbone.View.extend({
    el: "#canvas",
    render: function () {
        $("#canvas-container").droppable({
            drop: this.handleDropEvent
        });
    },
    addOuterOdperator: function (toolID) {
        console.log(toolID);
        console.log("outer");
    },
    handleDropEvent: function (event, ui) {
        console.log("inside handle func");
        var id = 0;
        var addInnerOperator=function(ie){
            console.log("inner");
        };
        addInnerOperator(id);
        //this.addOuterOperator(id); gives an errror 
    }
});

我认为您在使用 this.addOuterOperator 时遇到了错误,因为您在事件处理程序上下文中。因此,为避免这种情况,您可以尝试以下代码:

var CanvasView = Backbone.View.extend({
    el: "#canvas",
    render: function () {
        var self = this; //creating a self reference
        $("#canvas-container").droppable({
            drop: function( event, ui ) {
                self.handleDropEvent(event, ui, self); //passing the self reference
            }
        });
    },
    addOuterOdperator: function (toolID) {
        console.log(toolID);
        console.log("outer");
    },
    handleDropEvent: function (event, ui, selfRef) {
        console.log("inside handle func");
        var id = 0;
        var addInnerOperator=function(ie){
            console.log("inner");
        };
        addInnerOperator(id);
        selfRef.addOuterOperator(id); //accessing the function via selfRef
    }
});