如何创建枚举或我应该在哪里存储它?

时间:2015-10-15 07:28:15

标签: javascript extjs extjs4 extjs4.2

我一直在使用ExtJS,我发现自己正在使用" magic"进行大量检查。字符串。我想使用某种枚举,即

Colors.Red,Colors.White

Extjs是否支持此功能,我使用的是版本4.2。

此外,如果我需要创建一个新的类或其他什么,那么它的正确位置在哪里?

我目前有

  /app
   controller
   store
   models
   views
    etc

这些似乎不是正确的位置,因为它们专门用于控制器,视图,模型,商店..

创建不适合上述内容的建议在哪里?

2 个答案:

答案 0 :(得分:2)

这可以用不同的方式完成,只是为了给你一些灵感。

我在自己的应用中所做的是在for(var key in data.Quote){ console.log(data.Quote[key].bidPrice); } 中创建一个文件夹enums。在这个文件夹中,我把我想要在我的应用程序中使用的所有枚举。请注意,我使用app folderalternateClassName来使它们更像枚举。

只是一个枚举:

uppercase

我可以这样使用它:

Ext.define('MyApp.enums.Orientation', {
    alternateClassName: ['ORIENTATION'],

    statics: {
        PORTRAITPRIMARY: 'portrait-primary', // The orientation is in the primary portrait mode.
        PORTRAITSECONDARY: 'portrait-secondary', // The orientation is in the secondary portrait mode.
        LANDSCAPEPRIMARY: 'landscape-primary', // The orientation is in the primary landscape mode.
        LANDSCAPESECONDARY: 'landscape-secondary', // The orientation is in the secondary landscape mode.
        PORTRAIT: 'portrait', // The orientation is either portrait-primary or portrait-secondary.
        LANDSCAPE: 'landscape' // The orientation is either landscape-primary or landscape-secondary.
    }
});

MyApp.util.CordovaPlugins.lockOrientation(ORIENTATION.LANDSCAPE); 看起来像这样:

lockOrientation

另一个枚举:

/**
 * Lock the viewport in a certain orientation and disallow rotation using the cordova screen orientation plugin
 * See [github.com/gbenvenuti/cordova-plugin-screen-orientation](https://github.com/gbenvenuti/cordova-plugin-screen-orientation)
 * for more details.
 *
 * Usage:
 * MyApp.util.CordovaPlugins.lockOrientation(ORIENTATION.LANDSCAPE);
 *
 * Possible orientations:
 * ORIENTATION.PORTRAITPRIMARY
 * ORIENTATION.PORTRAITSECONDARY
 * ORIENTATION.LANDSCAPEPRIMARY
 * ORIENTATION.LANDSCAPESECONDARY
 * ORIENTATION.PORTRAIT
 * ORIENTATION.LANDSCAPE
 *
 * @param {Enum} orientation Value of type MyApp.enums.Orientation to orientate the view in the given orientation.
 */
lockOrientation: function(orientation) {
    if (ORIENTATION.hasOwnProperty(orientation.toUpperCase())) {
        screen.lockOrientation(orientation);
    }
    else {
        Ext.Logger.error('The given orientation is not prohibited.');
    }
}

用法:

Ext.define('MyApp.enums.PositionError', {
    alternateClassName: ['POSITIONERROR'],

    statics: {
        PERMISSION_DENIED: 1,
        POSITION_UNAVAILABLE: 2,
        TIMEOUT: 3
    }
});

我将枚举添加到我使用枚举的类中的getGpsErrorTitleByErrorCode: function(errorCode) { var title; switch (errorCode) { case POSITIONERROR.PERMISSION_DENIED: title = 'PERMISSION_DENIED'; break; case POSITIONERROR.POSITION_UNAVAILABLE: title = 'POSITION_UNAVAILABLE'; break; case POSITIONERROR.TIMEOUT: title = 'TIMEOUT'; break; default: title: 'UNKNOWN_ERROR'; break; } return title; } 数组中:

uses

Ext.define('MyApp.util.CordovaPlugins', { uses: [ 'MyApp.enums.PositionError', 'MyApp.enums.Orientation' ], ... }); requires数组app.js全局制作:

Ext.application({
    name: 'MyApp',

    requires: [
        'MyApp.enums.*'
    ],

    ...
});

答案 1 :(得分:0)

ExtJS只是一个JavaScript框架,所以你可以用你在Ext。

中做的任何事情

就文件夹结构而言,它纯粹是个人偏好,除了他们对商店,模特等的约定,正如您所描述的那样。 我建议使用一个足够通用的结构来应用于多个项目,以便您可以根据需要迁移结构,或者跨项目移动方面而无需将它们插入其中。

就像Colours.Red这样的事情而言,你可以通过普通的JS做到这一点,所以也许是这样的对象:

var Colours = {
    Black: "#000000",
    White: "#FFFFFF"
};

要以更多的方式执行此操作,您需要查看以下内容:

Ext.define('MyApp.model.Util', {
   statics: {
      Colours: {
         Black: 1, 
         White: 2
      }
    }
});