如何使用ember-model定义枚举

fvi*_*cot 5 javascript ember.js ember-model

在我的ember模型模型中,我需要从枚举中设置String属性.有没有可能与ember模型?

通过示例我想要一个Book模型:

App.Book({
    id: Ember.attr(),
    title: Ember.attr( 'String' ),
    author: Ember.attr( 'String' ),
    status: App.BookStatus
});
Run Code Online (Sandbox Code Playgroud)

App.Book.Status作为具有3个可能值的枚举"FREE", "BORROW", "LOST"并使用它:

var myBook = App.Book.create({
    title:'myBook', 
    author:'fred', 
    status: App.BookStatus.FREE
})
Run Code Online (Sandbox Code Playgroud)

我需要等同于Java Enum功能

public enum BookStatus {
    FREE, BORROW, LOST 
}

class Book {
    BookStatus bookStatus;
}

Book bookInstance = new Book();
bookInstance.bookStatus=BookStatus.LOST;
Run Code Online (Sandbox Code Playgroud)

int*_*xel 6

如文档中所述:

在Ember.js中,Enumerable是包含许多子对象的任何对象,它允许您使用Ember.Enumerable API处理这些子对象.

例如:

var players = ["Alex", "Paul", "Tom"];

players.forEach(function(item, index) {
  console.log('Player %@: %@'.fmt(index+1, item));
});
Run Code Online (Sandbox Code Playgroud)

输出:

// Player 1: Alex
// Player 2: Paul
// Player 3: Tom
Run Code Online (Sandbox Code Playgroud)

要使您自己的自定义类可枚举,您需要两个项目:

要在ember中创建自己的可枚举类/对象,可以使用Ember.Enumerablemixin并遵循以下两个要求:

  • 你必须拥有一个length房产.只要可枚举对象中的项目数发生更改,此属性就会更改.如果将其与Ember.Object子类一起使用,则应确保length使用内置set()方法更改属性.

  • 如果你必须实施nextObject().

实现这两个方法后,将Ember.Enumerablemixin应用于您的类,您将能够像任何其他集合一样枚举对象的内容.

伪代码:

App.MyEnumObject = Ember.Object.extend(Ember.Enumerable, {
  length: 0,
  nextObject: function() {
    //return the next object of the enumeration
  }
  //more methods and properties
});
Run Code Online (Sandbox Code Playgroud)

有关ember中可枚举的更多信息,请参见此处.

希望能帮助到你.

编辑

由于我们使用的是javascript,您尝试做的事情可以用更简单的方式完成.例如:

App.bookStatus = {
  FREE: "FREE",
  BORROW: "BORROW",
  LOST: "LOST"
}

var myBook = App.Book.create({id: 1, title: 'myBook', author: 'fred', status: App.bookStatus.FREE})
Run Code Online (Sandbox Code Playgroud)