美文网首页
LayaIDE name属性使用

LayaIDE name属性使用

作者: fat___lin | 来源:发表于2019-01-28 22:20 被阅读5次

    问题:

    • varname的区别
    • name属性存在的意义
    LayaIDE 属性面板

    初学laya,看到IDE 中var、name两个属性的时候挺迷惑的,有一种既生瑜何生亮的感觉。


    Laya官方文档描述

    • var :声名一个唯一的全局变量名称,用于在项目的代码中根据这个名称来调用这个组件。
    • name: 是组件的标识名称,通常用于层级管理器中区分其它组件,他的父容器也可以通过这个名称找到这个组件。

    dataSource中应用

    laya源码

    • Component.as:
    /**
             * <p>数据赋值,通过对UI赋值来控制UI显示逻辑。</p>
             * <p>简单赋值会更改组件的默认属性,使用大括号可以指定组件的任意属性进行赋值。</p>
             * @example
               //默认属性赋值
               dataSource = {label1: "改变了label", checkbox1: true};//(更改了label1的text属性值,更改checkbox1的selected属性)。
               //任意属性赋值
               dataSource = {label2: {text:"改变了label",size:14}, checkbox2: {selected:true,x:10}};
             */
            public function get dataSource():* {
                return _dataSource;
            }
            
            public function set dataSource(value:*):void {
                _dataSource = value;
                for (var prop:String in _dataSource) {
                    if (hasOwnProperty(prop) && !(this[prop] is Function)) {
                        this[prop] = _dataSource[prop];
                    }
                }
            }
    
    
    • Box.as: 继承了Compent,重写dataSource的set方法,实现对容器下所有节点dataSource的赋值。
    /**@inheritDoc */
            override public function set dataSource(value:*):void {
                _dataSource = value;
                for (var name:String in value) {
                    var comp:Component = getChildByName(name) as Component;
                    if (comp) comp.dataSource = value[name];
                    else if (hasOwnProperty(name) && !(this[name] is Function)) this[name] = value[name];
                }
            }   
    

    容器中应用

    laya源码

    • List.as
            /**
             * 初始化单元格信息。
             */
            public function initItems():void {
                if (!_itemRender && getChildByName("item0") != null) {
                    repeatX = 1;
                    var count:int;
                    count = 0;
                    for (var i:int = 0; i < 10000; i++) {
                        var cell:Box = getChildByName("item" + i) as Box;
                        if (cell) {
                            addCell(cell);
                            count++;
                            continue;
                        }
                        break;
                    }
                    repeatY = count;
                }
            }
    
    • UIGroup.as
            /**
             * 初始化项对象们。
             */
            public function initItems():void {
                _items || (_items = new Vector.<ISelect>());
                _items.length = 0;
                for (var i:int = 0; i < 10000; i++) {
                    var item:ISelect = getChildByName("item" + i) as ISelect;
                    if (item == null) break;
                    _items.push(item);
                    item.selected = (i === _selectedIndex);
                    item.clickHandler = Handler.create(this, itemClick, [i], false);
                }
            }
    

    结论:

    • name 可以通过Node.as中getChildByName获取节点(需要做一次for循环)
    • name 通过dataSource支持数据直接赋值给ui组件的属性
    • ListUIGroup等容器中支持 name 为itemX的组件自动添加到容器中
    • 使用MVVM框架,如果ui绑定的数据有修改,需要通知UI变更时似乎没有特别的优化

    相关文章

      网友评论

          本文标题:LayaIDE name属性使用

          本文链接:https://www.haomeiwen.com/subject/zkgajqtx.html