2013-07-24 103 views
0

我已经在JavaScript中定义了以下枚举:如何使用枚举来定义另一个枚举?

/** 
* Represents the document type. 
* 
* @enum 
*/ 
var DOCUMENT_TYPE = { 
    TC_INVOICE: 1, 
    TC_CREDIT_NOTE: 2, 
    OFFHIRE_INVOICE: 3, 
    OFFHIRE_CREDIT_NOTE: 4 
} 

现在我想要定义另一个枚举文档类“发票”和“信用票据”。我试过这样的事情。:

/** 
* Represents the document class ("invoice" or "credit note"). 
* 
* @enum 
*/ 
var DOCUMENT_CLASS = { 
    INVOICE: { 
     1: DOCUMENT_TYPE.TC_INVOICE, 
     3: DOCUMENT_TYPE.OFFHIRE_INVOICE 
    }, 
    CREDIT_NOTE: { 
     2: DOCUMENT_TYPE.TC_CREDIT_NOTE, 
     4: DOCUMENT_TYPE.OFFHIRE_CREDIT_NOTE 
    } 
} 

数据库列保存文档类型的值(可能的整数值:1,2,3,4)。现在,我要检查它是否是发票或信用票据,如:

if (DOCUMENT_CLASS.INVOICE) { 
    doSomething(); 
} else if (DOCUMENT_CLASS.CREDIT_NOTE) { 
    doSomeOtherThing(); 
} 

回答

1

这应做到:

if (DOCUMENT_CLASS.INVOICE[column]) { 
    doSometjing(); 
} else if (DOCUMENT_CLASS.CREDIT_NOTE[column]) { 
    doSomeOtherThing(); 
} 

column是要检查数据库列保存值的变量。

另一种方法可以做到这一点是通过使文档类数组:

var DOCUMENT_CLASS = { 
    INVOICE: [ DOCUMENT_TYPE.TC_INVOICE, DOCUMENT_TYPE.OFFHIRE_INVOICE ], 
    CREDIT_NOTE: [ DOCUMENT_TYPE.TC_CREDIT_NOTE, DOCUMENT_TYPE.OFFHIRE_CREDIT_NOTE ] 
}; 

然后你可以这样写:

if (DOCUMENT_TYPE.INVOICE.indexOf(column) != -1) { 
    doSomething(); 
} else if (DOCUMENT_TYPE.CREDIT_NOTE.indexOf(column) != -1) { 
    doSomeOtherThing(); 
} 
+0

所以,我必须检查'DOCUMENT_CLASS.INVOICE [1]'和'DOCUMENT_CLASS.INVOICE [3]'如果我想知道它是否是发票? –

+1

'DOCUMENT_CLASS.INVOICE'是一个对象,不是一个整数;它有两个键,1和3.你不必检查两个键,你只是检查你给的值;如果存在,那就是发票。 – Barmar

+0

谢谢,'DOCUMENT_CLASS.INVOICE [columnDataProvider]'工作,但有没有更好的解决方案,所以我可以检查'if(DOCUMENT_CLASS.INVOICE)'? –