【问题标题】:Is there Global variables in EXT JSEXT JS中是否有全局变量
【发布时间】:2012-07-05 19:21:40
【问题描述】:

在 java 和 C++ 中,我们可以全局存储一个变量并从项目中的任何位置访问它的值。 比如说,我在一个名为 Residence 的类中,我将 residenceNumber 这是一个 INT 保存到一个名为 houseNumberGlobalVariable 的全局变量中。

现在,我可以从项目中的任何类访问houseNumberGlobalVariable。以类似的方式,EXTJS 中是否有我可以使用的全局变量。

我需要从一个类中设置一个值并从另一个类中访问它。 EXT JS 中的等价物是什么。我认为 EXTJS 中没有全局变量的概念,但它的等价物是什么?

【问题讨论】:

    标签: javascript extjs extjs4 extjs4.1


    【解决方案1】:

    创建一个特殊的类并将所有global 变量放在那里。

    Ext.define('MyApp.global.Vars', {
        singleton: true,
        ....   
        houseNumberGlobalVariable: undefined
    
    });
    

    这样,如果您需要在代码中的任何位置访问它,只需使用MyApp.global.Vars.houseNumberGlobalVariable

    【讨论】:

    • 我应该在哪里创建这个文件?在View ?
    • 我建议为该类创建一个单独的文件,或者将其放在 main app.js 中。
    • 这是用 ExtJS 声明全局变量的最佳方式。太糟糕了没有设置为答案。
    • 当我为此创建一个新的js时,我看不到或访问它..我需要在某个地方声明它吗?
    • 需要绑定的地方使用requires: [ 'TestApp.global.Links', ],
    【解决方案2】:

    只需在app.js 中声明一个变量,它将充当全局变量。

    var globalVar;
    

    你可以添加任何东西,比如

    globalVar.myStore = yourStore;
    

    【讨论】:

    • 将所有 global2 变量保存在一个类中会很容易。那么我什至可以使用@sha 的方法存储view,store 吗?
    • 是的,但我没试过!我通常将所有内容添加到同一个变量中。比如 globalVar.myView、globalVar.myCtl。我不知道在这里使用类有什么好处。
    • 如何访问我存储在globalvar.mystore 中的store?是 var accessstore = globalvar.mystore; ??
    • 我在 app.js 中设置了 globalvar。现在我正在尝试将控制器中的值设置为globalvar.id=1。然后我得到globalvar.id is not defined。当我只是设置globalvar=1 并尝试在其他地方访问它时var id=globalvar 然后它可以工作。你能解释一下你是如何设置像globalvar.store=mystore这样的值的吗?
    • 我错过了,在声明之后,我把它做成了一个数组。 globalVar= {};
    【解决方案3】:

    您可以根据您的应用程序声明您的全局变量。

    场景 1:在配置中声明

    如果您要使用 getter/setter 方法(即经常更改变量然后使用基于配置的方法)

    声明应用常量

    Ext.define('Practice.utilities.AppConstants', {
        alias: 'widget.AppConstants',
        config: {
            mainVarTest: 'mainVarTest',
        },
        testvar: 'Testing value',
        foo: 'bar',
        meh: 42,
        constructor: function(options) {
            this.initConfig(options);
        }
    });
    

    调用变量

    var AppConstants = Ext.widget("AppConstants"); 
    console.log(AppConstants.getMainVarTest());
    

    场景 2:在 Singleton 类中声明

    如果您的应用程序需要全局变量,但在应用程序内部不会再更改。此类有助于仅加载一次常量变量。 (即您不会更改变量)。此类型适合您的应用

    声明

    Ext.define('Practice.utilities.AppConstants', {
        alias: 'widget.AppConstants',
        singleton: true,
        testvar: 'Testing value',
        foo: 'bar',
        meh: 42,
    });
    

    调用

    var AppConstant=Practice.utilities.AppConstants;
    console.log(AppConstant.foo);
    

    场景 3:声明为静态

    Statics 是静态变量(与 java 完全相同)。使用静态变量的优点是变量的生命周期是无限长的,直到被明确清除。

    Ext.define("Practice.utilities.AppConstants", {
         statics: {
             mainVarTest: 'mainVarTest'
         },
     });
    

    【讨论】:

      【解决方案4】:

      我注意到这里缺少的一件事是 Sencha Architect 程序中关于如何创建全局变量的解决方案。

      转到项目检查器上的“应用程序”节点。接下来单击配置搜索/过滤框,这不仅用于搜索,还用于创建配置条目。当您第一次查看此框时,它会显示一个 Smokey 预填充文本 Filter Configs...

      输入你的全局变量名,你会注意到在下面的列表中没有找到任何东西,(如果在配置列表中找到了值,那么你已经有了这个变量或者你使用了关键字)。文本框和锁定图标的右侧是一个“添加”按钮。单击“添加”按钮将您的全局变量添加到应用程序中。

      假设此时我们已经创建了Foo 变量。您现在将在配置列表中看到一个条目。该条目的左侧是一个省略号按钮,这当前指定我们创建的新变量是一个字符串。单击按钮并将其更改为不同的内容,例如“数字”字段。为这个新变量输入一个值,您现在就完成了,您有一个全局变量。

      那么如何访问这个新创建的变量呢?这是一个将全局变量填充到要使用的局部变量中的示例代码。

      var bar= MyApp.app.Foo;
      

      “MyApp”引用是您正在创建的应用程序的 Application name 配置设置。您可以通过过滤name 在应用程序节点的配置设置中找到相同的值。

      【讨论】:

        【解决方案5】:

        var globalVar = {};添加你的 app.js 文件,它工作正常

        【讨论】:

          猜你喜欢
          • 2023-03-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多