首页 > 解决方案 > 在 CRM 上运行应用程序时出现 javascript 错误

问题描述

我正在开发一个应用程序,当我执行此操作时出现错误

var b=parseInt(a)+parseInt(b);

var a 没有定义。我如何获得a和b的值。我是一个新的学习者。谢谢你。

FieldToGet=300101; //int1
FieldToGet2=300102 //int2
FieldToSet=300103; //res


var TstFun = new function () {

this.T1=function(){
    iEventId_OnFocus=10;   
    iEventId_OnBlur=9;
    iComboType=1;


    centra.crmapi.getEditView().registerEventListener(function(obj){
        var data=obj['data'];
        var val=data[1];

        centra.crmapi.getEditView().getFieldValue(function(obj){
            var field1data=obj['data']
            var a=field1data[1];
        },FieldToGet,iComboType);

           centra.crmapi.getEditView().getFieldValue(function(obj){
            var field1data2=obj['data']
            var b=field1data2[1];
        },FieldToGet2,iComboType);

         var c=parseInt(a)+parseInt(b);

        centra.crmapi.getEditView().setFieldValue(function(obj){

        },FieldToSet,b,iComboType);

    },FieldToSet,10,iComboType);


};
};

标签: javascript

解决方案


变量ab都在提供给 的回调函数中声明getFieldValue,因此超出了封闭范围(对 的回调)的范围(即不可见registerEventListener)。您应该提升 and 的声明ab并且只在回调中分配给它们。

此外,回调的执行将被延迟,因此分配给aand的值b,即使声明被提升,也将无法在后续行中使用。您还需要嵌套回调,如下所示:

centra.crmapi.getEditView().registerEventListener(function(obj) {
    var data = obj['data'];
    var val = data[1];
    var a;
    var b;

    centra.crmapi.getEditView().getFieldValue(function(obj) {
        var field1Data = obj['data'];
        a = field1Data[1];

        centra.crmapi.getEditView().getFieldValue(function(obj) {
            var field1Data2 = obj['data']
            b = field1Data2[1];

            // This line should no longer error,
            // but `c` seems to be unused...
            var c = parseInt(a) + parseInt(b);

            centra.crmapi.getEditView().setFieldValue(function(obj) {
                // I'm not sure what should go here.
                // Maybe this is where you want to use the value of `c`?
            }, FieldToSet, b, iComboType);
        }, FieldToGet2, iComboType);
    }, FieldToGet, iComboType);
}, FieldToSet, 10, iComboType);

说了这么多,我不知道代码应该做什么。你的问题缺乏上下文,变量的命名很差,代码风格不一致。希望这会有所帮助:)


推荐阅读