对于 Ember 中的简单枚举,只需使用简单的 JavaScript 对象,如@intuitivepixel 答案底部所示就足够了,但是您可以使用 ember-computed-enum 获得更多功能的 Ember 样式枚举。
它允许通过更多 JavaScript 风格友好的名称获取和设置:
myBook.get('status'); // -> 'free'
myBook.set('status', 'lost');
myBook.get('status'); // -> 'lost'
myBook.save(); // -> saves `status: "LOST"` to the server
而且还添加了enumNameIsValue
在模板中特别有用的属性:
myBook.get('statusIsLost'); // -> true
myBook.get('statusIsFree'); // -> false
安装ember install ember-computed-enum
,然后使用非常简单
假设您的模型看起来像:
// app/models/book.js
import DS from 'ember-data';
export default DS.Model.extend({
title: DS.attr('string'),
author: DS.attr('string'),
statusCode: DS.attr('string')
});
从服务器statusCode
返回的位置为"FREE"
,"BORROW"
或"LOST"
你可以像这样添加一个mixin 风格的 Ember 枚举:
// app/models/book.js
import DS from 'ember-data';
import { computedEnumMixin } from 'ember-computed-enum';
BOOK_STATUS_ENUM = {
free: "FREE",
borrow: "BORROW",
lost: "LOST"
};
export default DS.Model.extend(
computedEnumMixin('status', 'statusCode', BOOK_STATUS_ENUM),
{
title: DS.attr('string'),
author: DS.attr('string'),
statusCode: DS.attr('string')
});
如果您无法在 API 中将status
字段名称更改为statusCode
,并且仍想使用该名称status
来访问代码中的值,则可以使用序列化程序重新映射模型字段名称:
// app/serializers/book.js
import DS from 'ember-data';
export default DS.JSONAPISerializer.extend({
attrs: {
statusCode: 'status' // map the API's "status" field to the "statusCode" field on the model
}
});
注意:我制作的示例反映了当前(2017 年 2 月)的 ember-cli 约定,而不是问题的旧全局样式