【问题标题】:short names for extjs classes and namespacesextjs 类和命名空间的短名称
【发布时间】:2013-11-28 13:00:06
【问题描述】:

我有类似的东西

Ext.define('HS.controller.Utility', {
  statics : {
    state : 'Oklahoma'
     }
  });

现在我想从我的控制器访问它,但在控制器的每一种方法中,我都必须写 HS.controller.Utility.state 才能访问它。目前我正在这样做:var ut = HS.controller.Utility,然后以ut.state 访问state,但同样,我必须在每个函数中声明这个变量。有没有办法在我的控制器中将其设置为一个短名称,然后从所有功能中访问?

【问题讨论】:

    标签: extjs extjs4 extjs-mvc


    【解决方案1】:

    有几种方法可以做到,其中最好的一种:

    // Becomes a global variable
    var X = Ext.define('My.long.class.Name');
    
    // Set a reference on your main NS at launch time
    launch: function() {
        MyApp.X = My.long.class.Name;
    }
    

    【讨论】:

    • 我不想走出MVC,有没有办法为每个类设置这样的变量?
    • “MVC 之外”是什么意思?如果您对此感到担心,请输入完整的班级名称!
    • 最好尽量避免使用全局方法和变量。绝对如果没有解决方案,那么我必须使用全局,但在此之前,如果有任何方法可以在类中声明它,我将它用于类的所有方法,那么它会很棒
    • 没有区别。如果你有一个“短名称”,你需要在某处声明一些东西。如果不想污染全局命名空间,那就用第二种方法吧。
    【解决方案2】:

    比当前答案更简单的是只声明一个没有命名空间的alternateClassName。只有一行代码,没有初始化或竞争条件,内置在 ExtJs 中。

    Ext.define('HS.controller.Utility', {
    
       //
       // Non-namespaced alternate class name will create 
       // 'globally defined' Utility object.
       //
       alternateClassName: 'Utility',
    
       statics : {
             state : 'Oklahoma'
          }
       });
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-31
      相关资源
      最近更新 更多