データアイテムのset()時にスキーマ制約違反があった場合の挙動
例外の発生
スキーマ制約に違反する値をデータアイテムにセットした時、例外が発生します。値はsetされません。
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時に例外が発生した場合はイベントは上がりません。
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()呼び出し時と比べて値に変更があった場合のみイベントが発火します。
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