ExtJs处理异步调用

时间:2016-04-26 18:59:20

标签: javascript asynchronous extjs extjs3

我们正在使用extjs 3.2.1 JavaScript Framework。在其中一个网格面板上有一个操作菜单。根据从数据库中检索到的值,我需要显示或隐藏菜单。为此,我可以使用菜单的隐藏属性。

问题是我用来从数据库异步检索值的函数,并且需要时间来检索值,并且当它返回菜单时已经初始化了。以下是两种方法。

employeeProfile: function(profileType) {
    CR.Controllers.Employee.GetProfile(function(result) {
        if (CR.CRError.ParseResult(result)) {
            switch (profileType) {
                case "IsStandardAllowed":
                    return result.IsStandardAllowed === 1 ? true : false;
                case "IsUploadAllowed":
                    return result.IsUploadAllowed === 1 ? true : false;
                case "IsCopyAllowed":
                    return result.IsCopyAllowed === 1 ? true : false;
                default:
                    return true;
            }
        }
        return true;
    }, this);
},

getMenuActions:
function() {
    return [
        // add button
        new CR.EmployeePanelAction({
            text: this.lang_newFromStandard,
            tooltip: this.lang_tipNewFromStandard,
            handler: this.onNewFromTemplate,
            hidden: this.EmployeeProfile("IsStandardAllowed")
            scope: this
        }),
        new CR.EmployeePanelAction({
            text: this.lang_newFromUpload,
            tooltip: this.lang_tipNewFromUpload,
            handler: this.onNewFromUpload,
            hidden: this.employeeProfile("IsUploadAllowed"),
            scope: this
        }),
        new CR.EmployeePanelAction({
            text: this.lang_newFromCopy,
            tooltip: this.lang_tipNewFromCopy,
            handler: this.onNewFromCopy,
            hidden: this.employeeProfile("IsCopyAllowed"),
            scope: this
        })
    ];
},

2 个答案:

答案 0 :(得分:0)

Ext.Button.hide(),自:1.1.0起可用

除非3.2.1中存在违规错误,否则应该为您服务。

答案 1 :(得分:0)

问题是我没有理解JavaScript回调和范围。我将回调方法与范围一起传递给数据库检索方法,并且工作正常。这是我用来成功检索的方法。

isImageActionAllowed: function(setImageActions, scope) {
        MVC.Controllers.Users.GetUserProfile(function(result) {
            if(MVC.Error.ParseResult(result)) {
                setImageActions.call(scope, result);
            }
        }, this);
    },