開発者ブログ
チュートリアル(データバインド編) » 10.scheduleアプリ データモデル定義

10.scheduleアプリ データモデル定義

Last modified by masaru-yokoyama on 2013/07/11, 21:14

データモデル定義

予定を管理するための情報をデータモデルを使って定義します。

サンプルアプリでは、スケジュールを定義するモデル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"形式の文字列で、このデータモデルの主キー文字列(自動)必須(自動)
schedulesdateの日付に登録されているスケジュールの配列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に登録・削除されるべきです。両モデルは互いに整合性を保つ必要があります。

次の章では、データモデルのイベントハンドリングを利用して、両者のデータモデルについてデータの整合性を取れるようにする方法を説明します。

次のステップ ⇒ サンプルアプリ イベントハンドリング


Copyright (C) 2012-2017 NS Solutions Corporation, All Rights Reserved.