如何为extjs中的变量赋值,可以在整个extjs应用程序中全局访问

时间:2016-07-13 08:10:33

标签: java extjs extjs4 extjs4.1 extjs4.2

我是ExtJS的新手。我使用ExtJS设计了一个登录页面,其中一个值从servlet响应成功返回到JS文件,如下所示。

LoginServlet.java

String user_role = "User1 - Admin";
myObj.addProperty("success", true);
myObj.addProperty("user_role", user_role);
out.println(myObj.toString());
out.close();

login.js

buttons: [{
                text: 'Login',
                handler: function(button)
                {
                    var formData = this.up('form').getForm();
                    formData.submit({
                        clientValidation: true,
                        url: '/LoginServlet',
                        method: 'POST',
                        success: function(form, action) {
                            user_role = Ext.JSON.decode(action.response.responseText);
                            Ext.MessageBox.alert('User_Role', user_role.user_role);
                            window.location = 'userhome.jsp';
                        },
                        failure: function(form, action) {
                        }
                    });
                }
            }

Ext.MessageBox.alert('User_Role', user_role.user_role);中,我收到了一条警告信息,如图所示。

enter image description here

我需要将值赋给全局变量,以便我可以在我的整个ExtJS应用程序中访问它(我有一个名为header.js的常见js文件,它包含在应用程序的所有JSP文件中,我想要在header.js中显示'user_role'的值,以便它将显示在所有JSP文件中)。

注意:我已将'user_role'变量定义为单独文件globalVar.js(下面的代码)中的全局变量,并且我已将globalVar.js作为所有JSP文件中的第一个js文件包含在内。)

var user_role;

我正在使用ExtJS 4.2。请建议一种方法来实现这一目标。

2 个答案:

答案 0 :(得分:0)

在实用程序中为您的应用程序添加单例类。

    Ext.define('MyApp.utilities.GlobalVar', {
      singleton : true,
      user_role : null
    }


    buttons: [{
                text: 'Login',
                handler: function(button)
                {
                    var formData = this.up('form').getForm();
                    formData.submit({
                        clientValidation: true,
                        url: '/LoginServlet',
                        method: 'POST',
                        success: function(form, action) {
                            user_role = Ext.JSON.decode(action.response.responseText);
                            Ext.MessageBox.alert('User_Role', user_role.user_role);
                            **MyApp.utilities.GlobalVar.user_role = user_role.user_role;**
                            window.location = 'userhome.jsp';
                        },
                        failure: function(form, action) {
                        }
                    });
                }
            }

在表单提交成功时分配全局变量,您可以在应用程序的任何位置使用全局变量。 [使用MyApp.utilities.GlobalVar.user_role]

答案 1 :(得分:0)

如果您使用带有storeId的商店将整个用户数据保存在一个位置,那将是一件好事。

从服务器获得回复后。使用该值更新您的商店。

该商店可以从整个应用程序中加入。

做Ext。 getStore('storeId')其中store if是商店的id

它还会保留您的用户数据组织。