開発者ブログ
リファレンス(仕様詳細) » データアイテムのset()時にスキーマ制約違反があった場合の挙動

データアイテムのset()時にスキーマ制約違反があった場合の挙動

Last modified by fukudayasuo on 2013/08/09, 19:16

例外の発生

スキーマ制約に違反する値をデータアイテムにセットした時、例外が発生します。値はsetされません。

var manager = h5.core.data.createManager('TestManager');
var model = manager.createModel({
name: 'TestModel',
schema: {
id: {
id: true
},
val: {
type: 'string'
}
}
});

var item = model.create({
id: '001',
val: 'abc'
});

try{
item.set('val', 1);
} catch(e){
// valはtype:'string'が指定されているため、数値を入れると以下の例外が発生します。
// Error: スキーマに定義されていないプロパティに値をセットすることはできません。データモデル=TestModel 違反したプロパティ=val(code=15013)
}

item.get('val') === 'abc'; // true
// 値は変更されません。

例外発生時のイベント

set時に例外が発生した場合はイベントは上がりません。

manager.addEventListener('itemsChange', function(){ alert('manager itemsChange!'); });
model.addEventListener('itemsChange', function(){ alert('model itemsChange!'); });
item.addEventListener('change', function(){ alert('item change!'); });

item.set('val', 1);
// 例外が発生し、alertは表示されない。

beginUpdate/endUpdate 中の例外

begeinUpdate()~endUpdate()の間で例外が発生した場合も、例外発生時に値は変更されず、イベントは発火しません。
endUpdate()時にbegeinUpdate()呼び出し時と比べて値に変更があった場合のみイベントが発火します。

manager.beginUpdate();
try {
item.set('val', 1);
} catch (e) {

}
manager.endUpdate();
// イベントは発火しない。

manager.beginUpdate();
try {
item.set('val', 'aaaaaa');
item.set('val', 1);
} catch (e) {

}
manager.endUpdate();
// イベントは発火する。

配列で複数のアイテムを作成するときに例外が発生した場合

TBD


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