0

我正在尝试将代码从 Visualforce(工作)迁移到 Lightning 组件。update 方法应该绘制一个图形,并在根节点发生变化时重新绘制它。我相信我正确地声明了这些方法,但是当我调用“更新”时,我得到了上述错误。我尝试更改函数名称以防它是保留关键字但得到相同的错误。有什么建议么??非常感谢

代码如下所示...

({
    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
    }
})
4

2 回答 2

0

在 Controller.js 中,您不能从回调方法中调用控制器的另一个函数。这仅在 helper.js 中允许。要么将“update”方法移动到 helper.js 和用户 helper.update(),要么在 helper.js 中同时移动 doInit 和 update。

({
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
    }
})
于 2016-08-23T12:58:11.337 回答
-1

你不能直接调用更新。您需要在调用 update 方法之前添加 .this 。请尝试以下更新的代码。

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

    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
}

})

如果这解决了您的问题,请做出正确的回答。

于 2015-10-06T07:07:34.973 回答