‘functionInBackboneView’ не является контекстом функции в Jquery

#javascript #jquery #backbone.js

#javascript #jquery #backbone.js

Вопрос:

У меня есть представление Backbone, в котором я устанавливаю droppable значение элемента. Я хочу получить доступ к внешнему 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 
    }
});
  

Ответ №1:

Я полагаю, что вы получаете ошибку с 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
    }
});