OSDN Git Service

Version 0.6.157, add X.Net.Form & fix X.EventDispatcher.
[pettanr/clientJs.git] / 0.6.x / js / 20_ui / 06_AbstractUINode.js
index 4ca1595..87cea63 100644 (file)
@@ -3,6 +3,8 @@ var XUI_AbstractUINode = X_EventDispatcher[ 'inherits' ](
        'X.UI._AbstractUINode',\r
        X_Class.ABSTRACT,\r
        {\r
+               itemData          : null,\r
+               \r
                phase             : 0,\r
                dirty             : XUI_Dirty.CLEAN,\r
                \r
@@ -77,8 +79,21 @@ var XUI_AbstractUINode = X_EventDispatcher[ 'inherits' ](
                },\r
                \r
                addToParent : function( xnodeParent ){\r
+                       var attr = this.attrObject || this.attrClass.prototype,\r
+                               usableAttrs = this.usableAttrs,\r
+                               i = 0, l = usableAttrs.length, def;\r
+                       \r
                        xnodeParent && xnodeParent[ 'append' ]( this.xnode );\r
                        \r
+                       if( attr ){\r
+                               for( k in usableAttrs ){\r
+                                       def = usableAttrs[ k ];\r
+                                       if( def[ 2 ] === XUI_Attr_USER.XNODE && X_Object_inObject( def.No, attr ) && attr[ k ] !== def[ 0 ] ){\r
+                                               this.xnode[ 'css' ]( XUI_Attr_Rename[ k ] || k, XUI_AbstractUINode_createCssText( this, k ) );\r
+                                       };\r
+                               };\r
+                       };\r
+                       \r
                        this.phase = 2;\r
                        this[ 'dispatch' ]( XUI_Event.ADDED );\r
                },\r
@@ -91,6 +106,7 @@ var XUI_AbstractUINode = X_EventDispatcher[ 'inherits' ](
                        this.User[ 'dispatch' ]( XUI_Event.CREATION_COMPLETE );\r
                        \r
                        // html 要素が親に追加されるまで控えていたイベントの登録\r
+                       // TODO listenOnce\r
                        if( events && ( l = events.length ) ){\r
                                for( i = 0; i < l; ++i ){\r
                                        this.listen.apply( this, events[ i ] );\r
@@ -229,6 +245,7 @@ var XUI_AbstractUINode = X_EventDispatcher[ 'inherits' ](
 \r
                        if( !v && v !== 0 ) v = defaultVal;\r
                        \r
+                       // UIAttrClass の初期設定の場合、ここで終わる\r
                        if( XUI_attrClassProto ){\r
                                attrs[ propID ] = v;\r
                                return;                 \r
@@ -786,8 +803,15 @@ var XUI_AbstractUINode = X_EventDispatcher[ 'inherits' ](
                        return ret;\r
                },\r
                \r
-               setItemData : function(){\r
-                       // this[ 'dispatch' ]( UI_Event.ITEMDATA_CHANGED );\r
+               setItemData : function( itemData ){\r
+                       if( this.itemData === itemData ) return;\r
+\r
+                       this.itemData = itemData;\r
+\r
+                       this[ 'dispatch' ]( { type : XUI_Event.ITEMDATA_CHANGED, itemData : itemData } );\r
+                       // itemData && itemData.listen( X_Event_CHANGED )\r
+                       // dataFeild dataFormatter dataValidator\r
+                       \r
                        // itemData.listen( X_Event_CHANGED ) -> this[ 'dispatch' ]( UI_Event.ITEMDATA_UPDATED );\r
                }\r
                \r
@@ -926,11 +950,11 @@ X.UI.AbstractUINode = X_Class_create(
                                        };\r
                                };\r
                        } else\r
-                       if( X_Type_isString( nameOrObject ) ){\r
+                       if( X_Type_isString( nameOrObject ) && ( def = p.usableAttrs[ nameOrObject ] ) ){\r
                                if( valueOrUnit !== undefined ){\r
                                        if( 'em,%'.indexOf( valueOrUnit ) === -1 ){\r
                                                // setter\r
-                                               p.setAttr( nameOrObject, valueOrUnit );\r
+                                               p.setAttr( nameOrObject, def, valueOrUnit );\r
                                        } else {\r
                                                // getter with unit\r
                                                return p.getAttrWithUnit( nameOrObject, valueOrUnit );\r
@@ -1011,11 +1035,21 @@ X.UI.AbstractUINode = X_Class_create(
                 * Repeater に於いて、繰り返されるアイテムの元(itemRenderer)からの複製に使用\r
                 */\r
                clone : function( opt_cloneListener ){\r
-                       var newNode = this.constructor(),\r
-                               newPair = X_Pair_get( newNode ),\r
+                       var newNode,\r
+                               //newPair = X_Pair_get( newNode ),\r
                                pair    = X_Pair_get( this ),\r
                                attr, listeners, type, list, i, l;\r
 \r
+                       // attr もコピー\r
+                       if( pair.attrObject ){\r
+                               attr = {};\r
+                               for( k in pair.usableAttrs ){\r
+                                       def = pair.usableAttrs[ k ];\r
+                                       attr[ k ] = pair.attrObject[ def.No ];\r
+                               };\r
+                               newNode = this.constructor( attr );\r
+                       };\r
+\r
                        // handleEvent 等の拡張されたオブジェクトもコピーする!\r
                        for( k in this ){\r
                                if( this[ k ] !== newNode[ k ] && !newNode[ k ] ) newNode[ k ] = this[ k ];\r
@@ -1023,17 +1057,14 @@ X.UI.AbstractUINode = X_Class_create(
                        \r
                        // User.UINODE な値は pair にコピーされているのでこれをコピー\r
                        for( k in pair ){\r
-                               if( pair[ k ] !== newPair[ k ] && !newPair[ k ] ) newPair[ k ] = pair[ k ];\r
+                               //pair[ k ] !== newPair[ k ] && !newPair[ k ] && console.log( k );\r
+                               //if( pair[ k ] !== newPair[ k ] && !newPair[ k ] && k !== 'attrObject' && k !== '_listeners' ){\r
+                                       //newPair[ k ] = pair[ k ];\r
+                                       //console.log( k );\r
+                               //};\r
                        };\r
                        \r
-                       // attr もコピー\r
-                       if( pair.attrObject ){\r
-                               attr = pair.attrClass();\r
-                               for( k in pair.attrObject ){\r
-                                       if( pair.attrObject[ k ] !== attr[ k ] ) attr[ k ] = pair.attrObject[ k ];\r
-                               };\r
-                               newPair.attrObject = attr;\r
-                       };\r
+\r
                        \r
                        // listener もコピーする!\r
                        if( opt_cloneListener && ( listeners = pair[ '_listeners' ] ) ){\r
@@ -1070,6 +1101,12 @@ X.UI.AbstractUINode = X_Class_create(
                                                };\r
                                        };                              \r
                                };\r
+                       } else\r
+                       if( opt_cloneListener && ( list = this.reserveEvents ) ){\r
+                               for( i = 0, l = list.length; i < l; ++i ){\r
+                                       f = list[ i ];\r
+                                       newNode[ f.once ? 'listenOnce' : 'listen' ]( f[ 0 ], newNode, f[ 1 ], f[ 2 ] );\r
+                               };      \r
                        };\r
                        \r
                        return newNode;\r