私たちは TypeScript でバックボーンを多用しており、斬新なソリューションを考え出しました。
次のコードを検討してください。
interface IListItem {
Id: number;
Name: string;
Description: string;
}
class ListItem extends Backbone.Model implements IListItem {
get Id(): number {
return this.get('Id');
}
set Id(value: number) {
this.set('Id', value);
}
set Name(value: string) {
this.set('Name', value);
}
get Name(): string {
return this.get('Name');
}
set Description(value: string) {
this.set('Description', value);
}
get Description(): string {
return this.get('Description');
}
constructor(input: IListItem) {
super();
for (var key in input) {
if (key) {
//this.set(key, input[key]);
this[key] = input[key];
}
}
}
}
インターフェイスはモデルのプロパティを定義し、コンストラクターは渡されたすべてのオブジェクトが Id、Name、および Description プロパティを持つことを保証することに注意してください。for ステートメントは、各プロパティに設定されたバックボーンを呼び出すだけです。次のテストに合格するように:
describe("SampleApp : tests : models : ListItem_tests.ts ", () => {
it("can construct a ListItem model", () => {
var listItem = new ListItem(
{
Id: 1,
Name: "TestName",
Description: "TestDescription"
});
expect(listItem.get("Id")).toEqual(1);
expect(listItem.get("Name")).toEqual("TestName");
expect(listItem.get("Description")).toEqual("TestDescription");
expect(listItem.Id).toEqual(1);
listItem.Id = 5;
expect(listItem.get("Id")).toEqual(5);
listItem.set("Id", 20);
expect(listItem.Id).toEqual(20);
});
});
更新:
ES5 の get および set 構文とコンストラクターを使用するようにコード ベースを更新しました。基本的に、Backbone の .get と .set を内部変数として使用できます。