10.scheduleアプリ データモデル定義
データモデル定義
予定を管理するための情報をデータモデルを使って定義します。
サンプルアプリでは、スケジュールを定義するモデルScheduleModelと、日ごとの予定を定義するモデルDailySchedulesModelを定義します。
まずは、データモデルを管理するデータモデルマネージャを作成します。
// データモデルマネージャ"ScheduleManager"を作成し、名前空間"Schedule.scheduleData"に公開する
var manager = h5.core.data.createManager('ScheduleManager', 'Schedule.scheduleData');
ScheduleModel
予定を管理するためのScheduleModelのスキーマを次のように定義します。
プロパティ名 | 説明 | 型 | 制約 |
---|---|---|---|
id | このスキーマの主キーとなるプロパティ | 文字列(自動) | 必須(自動) |
subject | 予定の件名 | 文字列 | 必須。空文字禁止。 |
detail | 予定の詳細 | 文字列 | 必須。空文字禁止。 |
date | 予定の日付 | 文字列 | |
from | 開始時刻 | 文字列 | hh:mm形式 |
to | 終了時刻 | 文字列 | hh:mm形式 |
fromTo | "開始~終了"のように開始・終了時刻を整形した項目 | 文字列 | from,to項目から計算 |
この表を元にデータモデルを作成します。
// スケジュール単体のデータモデル
// idキー, 件名、詳細、日付、開始時刻、終了時刻、開始~終了(計算項目)
var scheduleModel = manager.createModel({
name: 'ScheduleModel',
schema: {
// スケジュールID
id: {
id: true
},
// 予定の件名(必須)
subject: {
type: 'string',
constraint: {
// null,空文字禁止。
notEmpty: true
}
},
// 予定の詳細
detail: {
type: 'string'
},
// 日付 (yyyy/m/d形式で格納する)
date: {
type: 'string',
constraint: {
notEmpty: true
}
},
// 開始予定時刻
from: {
type: 'string',
constraint: {
// 時刻の正規表現(0:00~23:59または空文字)。これを満たさない文字列は格納できない。
pattern: /^$|^([0-9]|[0-1][0-9]|[2][0-3]):([0-9]|[0-5][0-9])$/
}
},
// 終了予定時刻
to: {
type: 'string',
constraint: {
pattern: /^$|^([0-9]|[0-1][0-9]|[2][0-3]):([0-9]|[0-5][0-9])$/
}
},
// 開始~終了
fromTo: {
depend: {
on: ['to', 'from'],
// toまたはfromが更新された時に計算される
calc: function() {
var to = this.get('to') || '';
var from = this.get('from') || '';
if (!to && !from) {
// toもfromも未定義なら空文字
return '';
}
// "開始時刻 ~ 終了時刻"となる文字列返す
return from + ' ~ ' + to;
}
}
}
}
});
// 作成したモデルをグローバルからたどれるよう公開する
Schedule.scheduleData.scheduleModel = scheduleModel;
DailySchedulesModel
次に、日付ごとにスケジュールを管理するデータモデルを作成します。スキーマは次のように定義します。
プロパティ名 | 説明 | 型 | 制約 |
---|---|---|---|
date | "yyyy/m/d"形式の文字列で、このデータモデルの主キー | 文字列(自動) | 必須(自動) |
schedules | dateの日付に登録されているスケジュールの配列 | ScheduleModelのアイテムの配列 | null禁止 |
// 日付をキーに複数のスケジュールを持つモデル
// date(yyyy/m/d形式の文字列)、スケジュール
var dailySchedulesModel = manager.createModel({
name: 'DailySchedulesModel',
schema: {
date: {
id: true
},
schedules: {
// 型指定にScheduleModelのアイテムの配列を指定する
type: '@ScheduleModel[]',
constraint: {
notNull: true
}
}
}
});
// 作成したモデルをグローバルからたどれるよう公開する
Schedule.scheduleData.dailySchedulesModel = dailySchedulesModel;
データモデルの作成は以上です。ScheduleModel, DailySchedulesModelの2つを使ってスケジュールデータを管理します。
DailySchedulesModelは、ScheduleModelに依存します。ScheduleModelに新しく予定が追加・削除されたら、その予定の日付についてDailySchedulesModelに登録・削除されるべきです。両モデルは互いに整合性を保つ必要があります。
次の章では、データモデルのイベントハンドリングを利用して、両者のデータモデルについてデータの整合性を取れるようにする方法を説明します。
次のステップ ⇒ サンプルアプリ イベントハンドリング