2017-07-28 117 views
2

我刚开始用Aurelia框架学习Typescript。我已经在Aurelia的Todo应用中实现了Matthew Davis的博客TypeScript Enums中的Aurelia模板使用ViewEngineHooks http://davismj.me/blog/template-constants/打字稿枚举默认值

我希望将默认枚举值设置为列表中的第二个值,并将默认值设置为列表中的第一个值。

另外我想请想知道,如果{藤,优先级}或{只是}的Todo需要进口,如待办事项,list.ts显示

todo.ts

// Pro Tip: By starting our enum at 1, we ensure that all values in the enum are truthy. 
export enum Priority { 
    High = 1, 
    Medium, 
    Low 
} 

export class Todo { 
    @observable done; 
    //*** Setting priority: Priority = 2 OR priority: Priority = Priority.Medium - Does not change the default from High/1 *** 
    //constructor(public list: TodoList, public description: string, public priority: Priority = 2, public editing: boolean = false) { 
    constructor(public list: TodoList, public description: string, public priority: Priority = Priority.Medium, public editing: boolean = false) { 
     this.list = list; 
     this.description = description; 
     //*** Setting this.priority = 2 OR this.priority = Priority.Medium - Does not change the default from High/1 ; 
     //this.priority = 2; 
     this.priority = Priority.Medium; 
     this.editing = false; 
    } 

待办事项列表.TS

//*** Is {Todo} OR {Todo, Priority} needed for importing? *** 
//import {Todo} from './todo'; 
import {Todo, Priority} from './todo'; 
... 
    add(description) { 
    if (description) { 
     //*** Setting (this, description, 2) OR (this, description, Priority.Medium) - Does not change the default from High/1 *** 
     //this.todos.push(new Todo(this, description, 2)); 
     this.todos.push(new Todo(this, description, Priority.Medium)); 
     this.invalidateView(); 
    } 
    } 

todo.html

<select id="priority" value.bind="type"> 
    <option value.bind="Priority[type]" repeat.for="type of Prioritys">${type}</option> 
</select> 
+0

在我的博客中有一个错字,感谢您帮我找到它 –

回答

0

据我所知当声明一个变量时,你不能设置一个枚举的默认值,与数字或布尔值相同的方式没有默认值。 但是,您可以像构造函数(priority: Priority = Priority.Medium)中那样为函数参数定义默认值,以便在调用构造函数时不必提供该参数。

两个附加说明: 是不是应该是this.priority = priority; this.editing = editing;而不是this.priority = Priority.Medium; this.editing = false;?其次,如果您将public放在参数前面,则会自动添加并分配类属性,因此您不需要构造函数的附加行。但是对于更复杂的类,我可能会手动创建和分配属性。

关于第二个问题:只要引用该枚举,就需要导入Priority,例如在编写Priority.Medium时。当您比较例如Priority类型的两个不同属性而不使用枚举的名称(例如this.todos[0].priority === this.todos[1].priority)时,不必导入它。

1

<option>小号

之所以没有使用model.bind正在改变这是因为正确的价值还没有被“分配”到<option>。为此,您需要使用model属性。

<select id="priority" value.bind="type"> 
    <option model.bind="Priority[type]" repeat.for="type of Priorities"> 
    ${type} 
    </option> 
</select>