2017-07-28 9 views
2

AureliaフレームワークでTypescriptを学び始めました。私は、AureliaのTodoアプリケーションにViewEngineHooks http://davismj.me/blog/template-constants/を使用して、Matthew DavisのブログTypeScript EnumをAureliaテンプレートに実装しました。typecript enumデフォルト値

デフォルトの列挙値をリストの2番目の値に設定したいと思います。リストの最初の値にデフォルト値を設定しています。

また、私は

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; 
    } 

のToDoリストは、TODO-list.tsに示すように、{藤堂、優先順位}または単に{藤堂は}インポート必要かどうかを知りたいでしょうしてください.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)で行ったように、関数パラメーターの既定値を定義することができます。そのため、コンストラクターの呼び出し時にそのパラメーターを指定する必要はありません。

さらに2つのノート: this.priority = Priority.Medium; this.editing = false;の代わりにthis.priority = priority; this.editing = editing;にする必要はありませんか?次に、publicをパラメータの前に置くと、クラスプロパティが自動的に追加され、割り当てられます。したがって、コンストラクタの追加行は必要ありません。しかし、より複雑なクラスの場合は、おそらくプロパティを手動で作成して割り当てます。

2番目の質問について:を書くときなど、その列挙型を参照するとすぐにPriorityをインポートする必要があります。列挙型の名前(たとえばthis.todos[0].priority === this.todos[1].priority)を使用せずに、タイプが異なるPriorityという2つの異なるプロパティを比較するときに、インポートする必要はありません。正しい値が<option>に「割り当て」されていないため

1

使用model.bind<option>

に何がそれを変更されていない理由があります。これを行うには、modelプロパティを使用する必要があります。

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