如何使用ember-model定义枚举

时间:2013-08-05 16:59:21

标签: javascript ember.js ember-model

在我的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;

2 个答案:

答案 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约定,而不是问题的旧全局样式

相关问题