我一直在使用ExtJS,我发现自己正在使用" magic"进行大量检查。字符串。我想使用某种枚举,即
Colors.Red,Colors.White
等
Extjs是否支持此功能,我使用的是版本4.2。
此外,如果我需要创建一个新的类或其他什么,那么它的正确位置在哪里?
我目前有
/app
controller
store
models
views
etc
这些似乎不是正确的位置,因为它们专门用于控制器,视图,模型,商店..
创建不适合上述内容的建议在哪里?
答案 0 :(得分:2)
这可以用不同的方式完成,只是为了给你一些灵感。
我在自己的应用中所做的是在for(var key in data.Quote){
console.log(data.Quote[key].bidPrice);
}
中创建一个文件夹enums
。在这个文件夹中,我把我想要在我的应用程序中使用的所有枚举。请注意,我使用app folder
和alternateClassName
来使它们更像枚举。
只是一个枚举:
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
}
}
});