Неизвестная ошибка: обновление не определено (при вызове функции с именем update в Callback — контроллере Lightning JS)

Я пытаюсь перенести код из Visualforce (работает) в компонент Lightning. Метод обновления должен рисовать график и перерисовывать его при изменении корневого узла. Я считаю, что правильно объявляю методы, но когда я вызываю «обновление», я получаю указанную выше ошибку. Я попытался изменить имя функции, если это было зарезервированное ключевое слово, но получил ту же ошибку. Какие-либо предложения?? Большое спасибо

Код выглядит следующим образом...

({
    doInit : function(component, event, helper) {

        var action = component.get("c.getNodeJSON");

        action.setCallback(this, function(response){       
            var data = JSON.parse(response.getReturnValue());
            component.set("v.root", data);
            update(component, root);
        });

        $A.enqueueAction(action);
    },

    update : function(component, source) {
        var root = component.get("v.root");
        // etc etc
    }
})

person ThomasSFDC    schedule 21.09.2015    source источник
comment
Удалось ли вам вызвать функцию обновления? Я пытался использовать это, это тоже не сработало, так как оно ссылается на это для action.setCallback   -  person Malay Desai    schedule 28.05.2016


Ответы (2)


В Controller.js вы не можете вызывать другую функцию контроллера из метода обратного вызова. Это разрешено только в helper.js. Либо переместите метод update в helper.js и пользователя helper.update(), либо переместите doInit и update в helper.js.

({
doInit : function(component, event, helper) {

    var action = component.get("c.getNodeJSON");

    action.setCallback(this, function(response){       
        var data = JSON.parse(response.getReturnValue());
        component.set("v.root", data);
        helper.update(component, root);
    });

    $A.enqueueAction(action);
},    

})

Затем в вашем helper.js

({
    update : function(component, source) {
        var root = component.get("v.root");
        // etc etc
    }
})
person Malay Desai    schedule 23.08.2016

Вы не можете вызвать обновление напрямую. вам нужно добавить .this перед вызовом метода обновления. пожалуйста, попробуйте ниже обновленный код.

({ doInit : функция (компонент, событие, помощник) {

    var action = component.get("c.getNodeJSON");
    var self = this;
    action.setCallback(this, function(response){       
        var data = JSON.parse(response.getReturnValue());
        component.set("v.root", data);
        this.update(component, root);
    });

    $A.enqueueAction(action);
},

update : function(component, source) {
    var root = component.get("v.root");
    // etc etc
}

})

Пожалуйста, ответьте правильно, если это решило вашу проблему.

person Sandeep_Dobariya    schedule 06.10.2015