LayaIDE name属性使用
2019-01-28 本文已影响5人
fat___lin
问题:
-
var
、name
的区别 -
name
属性存在的意义
初学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组件的属性 -
List
、UIGroup
等容器中支持name
为itemX的组件自动添加到容器中 - 使用MVVM框架,如果ui绑定的数据有修改,需要通知UI变更时似乎没有特别的优化