开发技巧:批量添加组件&设置组件属性

2018-12-22  本文已影响0人  iqxtreme

应用情景

应用举例

场景中有大量节点需要添加拖拽组件(geoDraggable),

拖拽组件

并且还要把这些拖拽组件的lockTarget、dragMoveEvents、dragEndEvents设置为相同的。

拖拽组件的属性
var Utils = require('geoUtils');
// 定义要获取的组件
var Draggable = require('geoDraggable');
// 或者直接用组件类名(文件名)
var Draggable = 'geoDraggable';
// 获得已配置好的组件
var refinedCom = refinedNode.getComponent(Draggable);
// 构建要复制的属性承载结构
var attrs = Utils.obj.getAttrs(refinedCom, ['lockTarget', 'dragMoveEvents', 'dragEndEvents']);
// 为rawNode的子孙附加拖拽组件并设置属性
Utils.node.setComponentAttrs(
  rawNode, // 以该节点为起点执行操作
  Draggable, // 目标是拖拽组件
  attrs, // 要将拖拽组件的属性依据attrs进行设置
  true, // 考虑(遍历)rawNode到子孙节点
  'drag', // 只关注携带drag=a标记到节点
  'a', // 只关注携带drag=a标记到节点
  true // 若遍历到的节点没有Draggable组件就自动附加
);

方法详解

/**
 * 设置一个节点(或包含其子孙节点)某类组件的指定属性值。
 */
setComponentAttrs(
  node, // 被设置的节点
  componentTypeOrName, // 目标组件类型或名称
  attrs, // 要设置的组件属性名及值
  includeHierarchy, // 是否考虑node子孙
  markNameInHierarchy, //列为考虑对象的子孙的标记名
  markValueInHierarchy, // 列为考虑对象的子孙的标记值
  addIfNotExists, // 若组件不存在是否自动添加, 
  validateFunc // 验证是否对遍历到到节点实施操作
)

延展阅读

上一篇下一篇

猜你喜欢

热点阅读