``` javascript model.addEventListener('itemsChange', function(){ alert('itemsChange!') }); try{ // 2番目の引数によって例外が発生する。 model.create([{id:'00001', val:'1'}, {id:'00002', val:2}, {id:'00003', val:3}]); } catch(e) { // 2番目の引数によって例外が発生する } // イベントは発生しない model.get('00001'); // 例外発生までのアイテムは作成されている model.get('00002') === null; // true model.get('00003') === null; // true ``` アイテムが作成されているのにイベントが発生しないのはおかしいので、仕様を変更する。
Activity
fukudayasuo commentedon Aug 9, 2013
途中で例外が発生した場合は、データアイテムを1つも作らない、または値をセットしないように修正します。
(create()は引数に渡したもの全て作られる(またはセットされる)か、全て作られない(セットされない)かのどっちかになります。)
アイテムの作成、またはアイテムのセット内で行っているvaliidate処理を別メソッドに切り分け、全てvalidateが通ってからcreate,setするように修正します。
また、切り分けた別メソッドを外にだし、ユーザコードからアイテム生成またはセットの前にvalidateチェックを行えるようにします。
hifive#232 対応しました。
hifive#232 validateCreate, validateSetのテストを追加しました。ソースコード修正しました。
fukudayasuo commentedon Aug 12, 2013
createはデータアイテムを1つも作らない、または値をセットしないように修正しました。
model.createとitem.setは、引数チェック関数を呼び出してからcreate/setを行うようにしました。
DataModel#validateCreate, DataItem#validateSetメソッドを公開し、ユーザコードからチェックをできるようにしました。
テストケースの追加を行いました。
validateCreate/validateSetは、引数をcreate/setに渡した時に例外が発生する場合はその例外オブジェクト、例外が発生しない場合はnullを返すようにしました。
validateCreate/validateSetでは、depend項目の計算までは行いません。(depend.calcは実行しません)。
これは、calcの戻り値がチェック時とセット時で同じになるとは限らないためです。
そのため、depend.calcを実行した時に例外が発生するかどうかは実際にセットするまで分かりません。
hifive#232 コメント追記
fukudayasuo commentedon Aug 12, 2013
validateCreate及びvalidateSetについては、新しくissueを作成しました。
#233