チェンジセット 941
- コミット日時:
- 2008/08/04 15:27:30 (4 年前)
- ファイル:
凡例:
- 変更無し
- 追加
- 削除
- 更新
- コピー
- 移動
as3/GeniusFramework/trunk/src/jp/seagirl/genius/models/Model.as
r916 r941 302 302 * 303 303 * @param value 新しいデータ 304 * @param key マージに使われる キー304 * @param key マージに使われるプライマリキー。複数のプライマリキーを作る場合は配列を渡します。 305 305 * @param ns XML名前空間 306 306 */ 307 public function merge(value:XMLList, key: String= 'id', ns:Namespace = null):void307 public function merge(value:XMLList, key:Object = 'id', ns:Namespace = null):void 308 308 { 309 309 if (rawdata == null) … … 312 312 return; 313 313 } 314 315 var keys:Array = key is Array ? key as Array : [key]; 314 316 315 317 if (ns == null) … … 320 322 321 323 var data1Index:int = data1Length; 322 324 323 325 for (var i:int = 0; i < data2Length; i++) 324 326 { 325 if (value[i].ns::[key] == undefined) 326 { 327 throw new Error('新しいデータのノードに子ノード「' + key + '」が見つかりません。'); 328 } 327 keys.forEach( 328 function (element:Object, index:int, array:Array):void 329 { 330 if (value[i].ns::[element] == undefined) 331 throw new Error('新しいデータのノードに子ノード「' + element + '」が見つかりません。'); 332 } 333 ); 329 334 330 335 var changedIndex:int = -1; 331 336 332 337 for (var j:int = 0; j < data1Length; j++) 333 338 { 334 if (rawdata[j].ns::[key] == undefined) 335 throw new Error('既存のデータのノードに子ノード「' + key + '」が見つかりません。'); 339 var hasElement:Boolean = true; 336 340 337 if (rawdata[j].ns::[key] == value[i].ns::[key]) 341 keys.forEach( 342 function (element:Object, index:int, array:Array):void 343 { 344 if (rawdata[j].ns::[element] == undefined) 345 throw new Error('既存データのノードに子ノード「' + element + '」が見つかりません。'); 346 347 if (rawdata[j].ns::[element] != value[i].ns::[element]) 348 hasElement = false; 349 } 350 ); 351 352 if (hasElement) 338 353 changedIndex = j; 339 354 } 340 355 341 356 if (changedIndex > -1) 342 357 rawdata[changedIndex] = value[i]; … … 344 359 rawdata[data1Index++] = value[i]; 345 360 } 361 346 362 } 347 363

