チェンジセット 941

差分発生行の前後
無視リスト:
コミット日時:
2008/08/04 15:27:30 (4 年前)
コミッタ:
seagirl
ログメッセージ:

merge メソッドのプライマリキーを複数設定出来るようにした

ファイル:

凡例:

変更無し
追加
削除
更新
コピー
移動
  • as3/GeniusFramework/trunk/src/jp/seagirl/genius/models/Model.as

    r916 r941  
    302302                 *  
    303303                 * @param value 新しいデータ 
    304                  * @param key マージに使われるキー 
     304                 * @param key マージに使われるプライマリキー。複数のプライマリキーを作る場合は配列を渡します。 
    305305                 * @param ns XML名前空間 
    306306                 */                      
    307                 public function merge(value:XMLList, key:String = 'id', ns:Namespace = null):void 
     307                public function merge(value:XMLList, key:Object = 'id', ns:Namespace = null):void 
    308308                { 
    309309                        if (rawdata == null) 
     
    312312                                return; 
    313313                        } 
     314 
     315                        var keys:Array = key is Array ? key as Array : [key];  
    314316                         
    315317                        if (ns == null) 
     
    320322                         
    321323                        var data1Index:int = data1Length; 
    322                                 
     324         
    323325                        for (var i:int = 0; i < data2Length; i++) 
    324326                        { 
    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                                ); 
    329334                                 
    330335                                var changedIndex:int = -1; 
    331                                  
     336 
    332337                                for (var j:int = 0; j < data1Length; j++)  
    333338                                { 
    334                                         if (rawdata[j].ns::[key] == undefined) 
    335                                                 throw new Error('既存のデータのノードに子ノード「' + key + '」が見つかりません。'); 
     339                                        var hasElement:Boolean = true; 
    336340                                         
    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) 
    338353                                                changedIndex = j; 
    339354                                } 
    340                                  
     355 
    341356                                if (changedIndex > -1) 
    342357                                        rawdata[changedIndex] = value[i]; 
     
    344359                                        rawdata[data1Index++] = value[i]; 
    345360                        } 
     361 
    346362                } 
    347363