開発者ブログ

02.基本的な使い方

Last modified by ishikawa on 2016/10/11, 09:59

ここでは、データモデルマネージャの作成からデータモデルの作成・削除、データアイテムの作成・更新・削除について、基本的な使い方の説明をします。

データモデルマネージャ、データモデル、データアイテムの関係

hifiveのデータモデル機構は、以下のような3つの階層からなります。
データモデルマネージャ(以下「データモデルマネージャ」と略記)は複数のデータモデルを管理し、データモデルは複数のデータアイテムを持ちます。

データベースに例えると、

  • データモデルマネージャ:データベース(の1インスタンス)
  • データモデル:表
  • データアイテム:レコード

のように考えるとよいでしょう。

dataModelER.png

データモデル機構を使うときの基本的な流れは
 データモデルマネージャを生成データモデルを生成データアイテムを生成
となります。

データモデルマネージャの作成

データモデルマネージャはh5.core.data.createManagerを使って作成します。

var manager = h5.core.data.createManager('SampleManager', 'sample');

createManagerはマネージャを作成して返します。

第1引数にデータモデルマネージャの名前を指定します。必須です。

第2引数にはデータモデルマネージャを公開する名前空間を文字列で指定します。指定された名前空間にデータモデルマネージャの名前でデータモデルマネージャを公開します。空文字を指定した場合はwindow直下に公開します。第2引数を省略した場合はマネージャをグローバルに公開しません。

上のコードの例では、sample.SampleManagerにデータモデルマネージャが公開されます。インスタンスはmanagerと同じです。

データモデルの作成

データモデルは、データモデルマネージャのcreateModelを使って作成します。
createModel()は、引数にディスクリプタオブジェクトを取ります。
「ディスクリプタ」とは、このデータモデルに属する各データアイテムがどのようなプロパティを持っているか、またそのプロパティにはどのような型・制約があるかを記述したものです。
ディスクリプタの記述については、次の章(ディスクリプタの書き方)で説明します。

var model = manager.createModel({
    name: 'SampleModel',
    schema: {
        id: {
            id: true
        },
        name: {
            type: 'string'
        },
        point: {
            type: 'integer',
            defaultValue: 0
        }
    }
});

データモデルの削除

データモデルマネージャからデータモデルを削除するには、dropModelメソッドを使用します。

// 引数にデータモデル名を指定する
manager.dropModel('SampleModel');

データアイテムの生成

データアイテムは、データモデルのcreateを使って作成します。

var item = model.create({    // modelは先ほど作成したデータモデル
   id: '001',
    name: '田中太郎',
    point: 50
});

item.get('id') === '001'         // true
item.get('name') === '田中太郎'  // true
item.get('point') === 50         // true

戻り値はデータアイテムインスタンスです。引数に指定したオブジェクト通りに値が格納されます。

また、値の指定を省略したプロパティには、デフォルト値が入ります。

デフォルト値はdefaultValueが指定されていればその値、指定されていない場合で、typeに配列が指定されている場合は空のObservableArrayインスタンス、そうでない場合はnullが格納されます。IDとして指定されたプロパティの値は省略できません。

var item2 = model.create({
    id: '002'    // IDとして指定されたプロパティなので、値を省略できない
});

item2.get('id') === '002'       // true
item2.get('name') === null      // true
item2.get('point') === null     // true

create に配列で複数のオブジェクトを指定すると、複数のアイテムを同時に作成することができます。

var items = model.create([{ id: '0001' },{ id: '0002' }, { id: '0003' }]);
// 戻り値は生成されたデータアイテムを要素に持つ配列

データアイテムの取得

登録されたデータアイテムをデータモデルから取得するには、getメソッドを使います。引数に、取得したいデータアイテムのID属性の値を指定します。

// idが'001'であるデータアイテムを取得
var item = model.get('001');

// idが'001','002'であるデータアイテムを取得
// 戻り値はデータアイテムの配列
var items = model.get(['001', '002']);

データアイテムの削除

データアイテムの削除は、データモデルのremoveメソッドを使います。引数に削除したいデータアイテムのID属性の値を指定します。

// idが'001'のデータアイテムを削除。
// 戻り値は削除されたデータアイテム。
var removedItem = model.remove('001');

// idが'0001','0002','0003'のデータアイテムを削除。
// 戻り値は削除されたデータアイテムの配列
var removedItems = model.remove(['0001', '0002', '0003']);

データアイテムからプロパティの取得

データアイテムから値を取得するにはget()メソッドを使います。引数にプロパティ名を指定すると、そのプロパティが持つ値が返ってきます。また、引数なしで呼び出すとデータアイテムの持つすべてのプロパティについて値が取得できるオブジェクトが返ってきます。プロパティ名がキー名、値がプロパティに対応する値を格納したオブジェクトです。

var item = model.create({
    id: '001',
    value1: 'AAA',
    value2: 'BBB'
});

item.get('id') === '001';        // true
item.get('value1') === 'AAA';    // true
item.get('value2') === 'BBB';    // true

// 引数なしでget
var itemValue = item.get();

itemValue.id === '001';          // true
itemValue.value1 === 'AAA';      // true
itemValue.value2 === 'BBB';      // true

// 取得したオブジェクトを書き換えても元のデータアイテムは書き変わらない
itemValue.value1 = 'CCC';

item.get('value1');              // 'AAA'

データアイテムに値を格納

データアイテムへの値の格納はset()メソッドを使います。

// モデルの作成
var model = manager.createModel({
    name: 'SampleModel',
    schema: {
        id: {
            id: true
        },
        val1: null,
        val2: null,
        val3: null,
        ary: {
            type: 'any[]'
        }
    }
});
var item = model.create({
    id: '001',
    val1: 'v1',
    val2: 'v2',
    val3: 'v3'
});

item.set('val1', 'new value'); // 第一引数にプロパティ名、第二引数にセットする値

item.set({              // オブジェクトでまとめてセットすることも可能
   val2: 'vv22',
    val3: 'vv33'
});

item.set('ary', ['A', 'B']);  // 配列をセット

typeで配列指定したプロパティ(上の例での'ary')には、初期状態で必ずObservableArrayインスタンスがセットされます(このインスタンスを変更することはできません)。この配列の各要素を操作したい場合は、get(), set()メソッドを使用してください。添え字によるアクセスはできません。

例:

item.get('ary').set(0, 'a');     // ○
// item.get('ary')[0] = 'a';     // この書き方はできない

なお、ObservableArrayは、通常の配列と同等のメソッド(splice、pop、push等)が用意されています。
詳しくはObservableArrayのAPIドキュメントを参照してください。

次のステップ ⇒ ディスクリプタの書き方


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