在我的ember模型模型中,我需要从枚举中设置String属性。 是否可以使用ember-model?
通过示例我希望有一个Book模型:
App.Book({
id: Ember.attr(),
title: Ember.attr( 'String' ),
author: Ember.attr( 'String' ),
status: App.BookStatus
});
和App.Book.Status
作为包含3个可能值"FREE", "BORROW", "LOST"
的枚举并使用它:
var myBook = App.Book.create({
title:'myBook',
author:'fred',
status: App.BookStatus.FREE
})
我需要等同于Java Enum功能
public enum BookStatus {
FREE, BORROW, LOST
}
class Book {
BookStatus bookStatus;
}
Book bookInstance = new Book();
bookInstance.bookStatus=BookStatus.LOST;
答案 0 :(得分:6)
正如文档中所述:
在Ember.js中,Enumerable是包含许多子对象的任何对象,它允许您使用Ember.Enumerable API处理这些子对象。
例如:
var players = ["Alex", "Paul", "Tom"];
players.forEach(function(item, index) {
console.log('Player %@: %@'.fmt(index+1, item));
});
输出:
// Player 1: Alex
// Player 2: Paul
// Player 3: Tom
要使您自己的自定义类可枚举,您需要两个项目:
要在ember中创建自己的可枚举类/对象,可以使用Ember.Enumerable
mixin并遵循以下两个要求:
您必须拥有length
财产。只要可枚举对象中的项目数发生更改,此属性就会更改。如果您使用Ember.Object
子类,则应确保使用内置的length
方法更改set()
属性。
如果您必须实施nextObject()
。
实施这两种方法后,将Ember.Enumerable
mixin应用到您的班级,您就可以像任何其他收藏一样枚举对象的内容。
伪代码:
App.MyEnumObject = Ember.Object.extend(Ember.Enumerable, {
length: 0,
nextObject: function() {
//return the next object of the enumeration
}
//more methods and properties
});
有关ember中可枚举的更多信息,请参阅here。
希望它有所帮助。
由于我们使用的是javascript,您尝试做的事情可以用更简单的方式完成。例如:
App.bookStatus = {
FREE: "FREE",
BORROW: "BORROW",
LOST: "LOST"
}
var myBook = App.Book.create({id: 1, title: 'myBook', author: 'fred', status: App.bookStatus.FREE})
答案 1 :(得分:0)
对于Ember中的简单枚举,只需使用一个简单的JavaScript对象,如@intuitivepixel's answer底部所示即可,但您可以获得a bit more functional, Ember-style enums with ember-computed-enum。
它允许通过更多JavaScript风格友好的名称来获取和设置:
declare @p8 as varchar(4000);
declare @sql as nvarchar(500)
set @p8 = 'AT0703%';
set @sql= 'SELECT sum(Movimenti.Importo)
FROM Movimenti
WHERE (IDConto LIKE ''' + @p8 + ''')'
exec sp_executesql @sql
还添加了在模板中特别有用的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"
的位置
您可以像这样添加mixin-style Ember enum:
"LOST"
注意:我已经通过示例来反映当前(2017年2月)的ember-cli约定,而不是问题的旧全局样式