引き続き翻訳しています。この間にも、3個くらいのpull requestがマージされており、コンフリクトしないかドキドキです。
テンプレートコントローラー
if
や repeat
などを従来はテンプレートコントローラーと呼んでいたのですが、カスタム属性と呼ぶことにしたようです。(挙動は代わりません)
これはわかりやすさの観点で良い変更です。どちらもHTMLエレメントの属性として使うので、名前から使い方が想起できるようになったと思います。
ただ内部的な挙動は変わっておらず、そのため、ifやrepeatっぽいものを自分で作るときには、テンプレートコントローラーという概念が出てきます。うーん、このあたりは進化するにつれて整理されていくでしょう。
wan't
811行目。これをwon't のtypoだと思って翻訳していましたが、wantのtypoでした。。。逆ですね。
カスタム属性の定義方法
デコレータの導入により、カスタム属性(旧 Attached Behavior)の定義方法が変わっています。
以前はstaticメソッドやプロパティで Behavior
オブジェクトを返す必要がありましたが、デコレータでスッキリ書けるようになっています。
import {inject, customAttribute} from 'aurelia-framework';
@customAttribute('show')
@inject(Element)
export class Show {
constructor(element) {
this.element = element;
}
valueChanged(newValue){
if (newValue) {
this.element.classList.remove('aurelia-hide');
} else {
this.element.classList.add('aurelia-hide');
}
}
}
オプションプロパティ
上記だと単一の属性しか指定できませんが、複数指定するオプションプロパティというものがあります。以前はこれもメタデータ + fluentAPIで一個づつ設定していましたが、デコレータを使って簡潔にかけるようになっています。
import {customAttribute, bindable} from 'aurelia-framework';
@customAttribute('my-attribute')
export class MyAttribite {
@bindable foo;
@bindable bar;
}
また、これをいちいち宣言しなくても、実行時にマップしてくれる @dynamicOptions
というデコレータも追加されました。