1.21 Drag Drop使用

本实例测试Drag Drop;

运行结果:

Drag图标Drop到添加Icon,会将一条记录添加到Table;

Drag Table记录Drop到垃圾桶Icon,会将记录删除;

Group1中不同Tray可以交换位置;

Group2中不同Tray可以交换位置;

Setting:设置Group1,Group2是否可以Drag,Drop;

1.创建Component,View: V_DRAGDROP;

2.创建Context节点;

创建Node:NODE_INFO,保存Icon信息;

Attribute:NAME,类型String,Icon名称;

Attribute:DESC,类型String,Icon描述;

Attribute:PIC,类型String,Icon详细信息;

创建Node:NODE_PARAM,setting绑定值,设置group1,group2是否drag,drop enable;

Attribute:GP1_DRAG_ENABLE,类型WDY_BOOLEAN,设置是否group1 drag enable;

Attribute:GP1_DROP_ENABLE,类型WDY_BOOLEAN,设置是否group1 drop enable;

Attribute:GP2_DRAG_ENABLE,类型WDY_BOOLEAN,设置是否group2 drag enable;

Attribute:GP2_DROP_ENABLE,类型WDY_BOOLEAN,设置是否group2 drop enable;

3.创建Layout UI Element

创建Tray:TRAY1,包含Group1,Group2;

创建Group:GROUP1:

创建Image:IMG1~3;

分别设置source:

~IconLarge/SuccessMessage

~IconLarge/ErrorMessage

~IconLarge/HintMessage

创建DropTarget:DT1,onDrop:绑定Action,DROP;

DT1中创建Image:IMG4,source: trash.png,MIMES上传图片;

DT1中创建DropTargetInfo: DROPTARGETINFO,设置tags: delete;

创建Group:GROUP2:

创建DropTarget:DT2,onDrop:绑定Action,DROP;

DT2中创建TextView,设置text, 添加Icon;

DT2中创建DropTargetInfo: DROPTARGETINFO_1,设置tags: save*

创建Tray:TRAY2,包含GP21,GP22,GP23;

创建Group:GP21,

创建Tray1~Tray4;

创建Group:GP22,

创建Tray5~Tray6;

创建Group:GP23,

创建CheckBox,分别绑定Attribute:GP1_DRAG_ENABLE,Attribute:GP1_DROP_ENABLE, Attribute:GP2_DRAG_ENABLE, Attribute:GP2_DROP_ENABLE;

4.Attributes页签,变量定义;

5.实现Method页签方法

Method: INIT_DRAGDROP,初始化Tray2中group1,group2中drag,drop设置,在WDDOMODIFYVIEW方法中调用;

代码实例:

 "drag_source_info,drop_target_info,有这两个属性可以设置drag drop
  "Gridlayout:CL_WD_GRID_LAYOUT
  "MatrixLayout:CL_WD_MATRIX_LAYOUT
  DATA:lo_container TYPE REF TO cl_wd_uielement_container.
  DATA:lo_gridlayout TYPE REF TO cl_wd_grid_layout.
  DATA:lo_drag_source_info TYPE REF TO cl_wd_drag_source_info.
  DATA:lo_drop_target_info TYPE REF TO cl_wd_drop_target_info.   wd_this->v_drag_group = 'GROUP1'.   "获取容器
  lo_container ?= wd_this->v_view->get_element( 'GP21' ).
  lo_gridlayout ?= lo_container->get_layout( ).
  lo_gridlayout->set_on_drop( 'DROP_GP1' ).
  lo_drag_source_info = cl_wd_drag_source_info=>new_drag_source_info(
    bind_enabled = 'NODE_PARAM.GP1_DRAG_ENABLE'
    view = wd_this->v_view
    tags = 'gp1drag'
  ).
  lo_drop_target_info = cl_wd_drop_target_info=>new_drop_target_info(
      bind_enabled = 'NODE_PARAM.GP1_DROP_ENABLE'
      view = wd_this->v_view
      tags = 'gp1drag* drop'
  ).
  "绑定drag,drop
  lo_gridlayout->set_drag_source_info( lo_drag_source_info ).
  lo_gridlayout->set_drop_target_info( lo_drop_target_info ).   "获取容器
  lo_container ?= wd_this->v_view->get_element( 'GP22' ).
  lo_gridlayout ?= lo_container->get_layout( ).
  lo_gridlayout->set_on_drop( 'DROP_GP2' ).
  lo_drag_source_info = cl_wd_drag_source_info=>new_drag_source_info(
    bind_enabled = 'NODE_PARAM.GP2_DRAG_ENABLE'
    view = wd_this->v_view
    tags = 'gp2drag'
  ).
  lo_drop_target_info = cl_wd_drop_target_info=>new_drop_target_info(
      bind_enabled = 'NODE_PARAM.GP2_DROP_ENABLE'
      view = wd_this->v_view
      tags = 'gp2drag* drop'
  ).
  "绑定drag,drop
  lo_gridlayout->set_drag_source_info( lo_drag_source_info ).
  lo_gridlayout->set_drop_target_info( lo_drop_target_info ).

Method: MODIFY_VIEW,当Tray2中,Group1,Group2拖动顺序改变时,更新页面。在WDDOMODIFYVIEW方法中调用。

代码实例:

  DATA:lo_container TYPE REF TO cl_wd_uielement_container.
  DATA:lo_element TYPE REF TO cl_wd_uielement.
  DATA:lt_elements TYPE cl_wd_uielement_container=>tt_uielement.
  DATA:lo_grid_layout TYPE REF TO cl_wd_grid_layout.
  DATA:lo_grid_data TYPE REF TO cl_wd_grid_data.
  DATA:lv_grid_data TYPE string.
  DATA:lv_source_index TYPE i.
  DATA:lv_target_index TYPE i.   "获取容器
  IF wd_this->v_drag_group = 'GROUP1'.
    lo_container ?= wd_this->v_view->get_element( 'GP21' ).
  ELSEIF wd_this->v_drag_group = 'GROUP2'.
    lo_container ?= wd_this->v_view->get_element( 'GP22' ).
  ENDIF.   lt_elements = lo_container->get_children( ).
  "获取被拖动的element,以及初始位置
  LOOP AT lt_elements INTO lo_element.
    lv_source_index = sy-tabix.
    lo_grid_data ?= lo_element->get_layout_data( ).
    lv_grid_data = lo_grid_data->get_drag_data( ).
    IF lv_grid_data = wd_this->v_drag_data.
      EXIT.
    ENDIF.
  ENDLOOP.
  IF wd_this->v_drag_data IS NOT INITIAL.
    IF wd_this->v_drag_offset = -1.
      lv_target_index = wd_this->v_drag_index.
    ELSE.
      lv_target_index = wd_this->v_drag_index + 1.
    ENDIF.
    IF lv_source_index < lv_target_index.
      lv_target_index = lv_target_index - 1.
    ENDIF.
    "移除再添加element
    lo_container->remove_child( index = lv_source_index ).
    lo_container->add_child( the_child = lo_element index = lv_target_index ).
  ENDIF. 

Method: ONACTIONDROP,Action:DROP对应方法;

代码实例:

DATA:lo_node TYPE REF TO if_wd_context_node.
  DATA:lo_element TYPE REF TO if_wd_context_element.
  DATA:lt_info TYPE wd_this->elements_node_info.
  DATA:ls_info TYPE wd_this->element_node_info.
  DATA:lo_event TYPE REF TO cl_wd_custom_event.
  DATA:lv_tags TYPE string.
  DATA:lv_index TYPE I.   lo_event = wdevent.
  lv_tags = tags.
  "lv_tags = lo_event->get_string( name = 'TAGS' ).
  "获取节点
  lo_node = wd_context->get_child_node( wd_this->wdctx_node_info ).
  lo_node->get_static_attributes_table( IMPORTING table = lt_info ).   CASE lv_tags.
    WHEN 'save_success'.
      READ TABLE lt_info INTO ls_info WITH KEY name = 'ICON_SUCCESS'.
      IF sy-subrc <> 0.
        ls_info-name = 'ICON_SUCCESS'.
        ls_info-desc = 'success'.
        ls_info-pic = '~IconLarge/SuccessMessage'.
        APPEND ls_info TO lt_info.
      ENDIF.     WHEN 'save_info'.
      READ TABLE lt_info INTO ls_info WITH KEY name = 'ICON_INFO'.
      IF sy-subrc <> 0.
        ls_info-name = 'ICON_INFO'.
        ls_info-desc = 'information'.
        ls_info-pic = '~IconLarge/HintMessage'.
        APPEND ls_info TO lt_info.
      ENDIF.
    WHEN 'save_error'.
      READ TABLE lt_info INTO ls_info WITH KEY name = 'ICON_ERROR'.
      IF sy-subrc <> 0.
        ls_info-name = 'ICON_ERROR'.
        ls_info-desc = 'error'.
        ls_info-pic = '~IconLarge/ErrorMessage'.
        APPEND ls_info TO lt_info.
      ENDIF.
    WHEN 'delete'.
      "获取选择行
      lv_index = lo_node->get_lead_selection_index( ).
      DELETE lt_info INDEX lv_index.
  ENDCASE.   lo_node->bind_table( new_items = lt_info set_initial_elements = abap_true ). 

Method: ONACTIONDROP_GP1,Action:DROP_GP1,处理group1中drop;

代码实例:

  DATA:lo_event TYPE REF TO cl_wd_custom_event.
  lo_event = wdevent.
  wd_this->v_drag_data = lo_event->get_string( 'DATA' ).
  wd_this->v_drag_tags = lo_event->get_string( 'TAGS' ).
  wd_this->v_drag_index = lo_event->get_int( 'INDEX' ).
  wd_this->v_drag_offset = lo_event->get_int( 'OFFSET' ).
  wd_this->v_drag_id = lo_event->get_string( 'ID' ).   "group
  wd_this->v_drag_group = 'GROUP1'.

Method: ONACTIONDROP_GP2,Action:DROP_GP2,处理group2中drop;

代码实例:

  DATA:lo_event TYPE REF TO cl_wd_custom_event.
  lo_event = wdevent.
  wd_this->v_drag_data = lo_event->get_string( 'DATA' ).
  wd_this->v_drag_tags = lo_event->get_string( 'TAGS' ).
  wd_this->v_drag_index = lo_event->get_int( 'INDEX' ).
  wd_this->v_drag_offset = lo_event->get_int( 'OFFSET' ).
  wd_this->v_drag_id = lo_event->get_string( 'ID' ).   "group
  wd_this->v_drag_group = 'GROUP2'.

WDA学习(28):Drag &Drop使用的更多相关文章

  1. HTML 学习笔记 (drag & drop)

    拖放(Drag & Drop)是一种常见的特性,即抓取对象以后拖到另一个位置.在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放.过去,我们用监听鼠标的Mousedown.Mouseo ...

  2. Win10/UWP新特性—Drag&Drop 拖出元素到其他App

    在以前的文章中,写过微软新特性Drag&Drop,当时可能由于处于Win10预览版,使用的VS也是预览版,只实现了从桌面拖拽文件到UWP App中,没能实现从UWP拖拽元素到Desktop A ...

  3. Android drag drop

    最近偶尔知道了锤子的one step,所以在网上看相关的东西,有人说android原生drag drop就能实现,我就去学习一下这个drag drop,下面把学习到的东西总结一下: drag drop ...

  4. Atitit。D&D drag&drop拖拽功能c#.net java swing的对比与实现总结

    Atitit.D&D drag&drop拖拽功能c#.net java swing的对比与实现总结 1. 实现一个D&D操作一般包括三个步骤: 1 2. .net黑头的拖曳机制 ...

  5. 【重点突破】——Drag&Drop拖动与释放

    一.引言 在学习HTML5新特性的时候,学到了Drag&Drop这两种拖放API,这里根据拖动的是“源对象”还是“目标对象”做两个小练习,主要是为了理解与应用HTML5为拖放行为提供的7个事件 ...

  6. HTML5魔法堂:全面理解Drag & Drop API

    一.前言    在HTML4的时代,各前端工程师为了实现拖拽功能可说是煞费苦心,初听HTML5的DnD API觉得那些痛苦的日子将一去不复返,但事实又是怎样的呢?下面我们一起来看看DnD API的真面 ...

  7. Draggabilly – 轻松实现拖放功能(Drag & Drop)

    Draggabilly 是一个很小的 JavaScript 库,专注于拖放功能.只需要简单的设置参数就可以在你的网站用添加拖放功能.兼容 IE8+ 浏览器,支持多点触摸.可以灵活绑定事件,支持 Req ...

  8. JS魔法堂:IE5~9的Drag&Drop API

    一.前言     < HTML5魔法堂:全面理解Drag & Drop API>中提到从IE5开始已经支持DnD API,但IE5~9与HTML5的API有所不同,下面我们来了解一 ...

  9. 重新想象 Windows 8 Store Apps (49) - 输入: 获取输入设备信息, 虚拟键盘, Tab 导航, Pointer, Tap, Drag, Drop

    [源码下载] 重新想象 Windows 8 Store Apps (49) - 输入: 获取输入设备信息, 虚拟键盘, Tab 导航, Pointer, Tap, Drag, Drop 作者:weba ...

  10. [转]人人网首页拖拽上传详解(HTML5 Drag&Drop、FileReader API、formdata)

    人人网首页拖拽上传详解(HTML5 Drag&Drop.FileReader API.formdata) 2011年12月11日 | 彬Go 上一篇:给力的 Google HTML5 训练营( ...

随机推荐

  1. CentOS7.6系统安装和网络配置

    CentOS7.6系统安装配置 前言:文章内容可能会因环境不同而有所差异,所谓集思广益说不定灵感就来了呢; 文章初衷旨在交流学习.记录个人成长,如果能帮助到您,那就点个赞噢. 环境说明: 1.本实验使 ...

  2. Earthdata批量下载MODIS遥感影像的方法

      本文介绍在Earthdata网站中,批量下载MODIS遥感影像的方法.   首先,打开网页:https://search.earthdata.nasa.gov/search ,如果没有Earthd ...

  3. VUE assets里的scss没有引用会被打包进代码里,本地代码和打包后的代码样式不一致解决办法

    1.打包部署后,发现样式和本地运行时候代码不一致 经过排查发现 这个路径的文件被打包进去了,但是我并没有引用这个文件啊啊啊啊啊a~~~~ src\assets\webgl-assets\scss\st ...

  4. angular打包出现JavaScript堆内存不足、启动也会内存溢出解决办法\increase-memory-limit' 不是内部或外部命令,

    ## 打包出现JavaScript堆内存不足 最近打包遇到这种报错 Ineffective mark-compacts near heap limit Allocation failed - Java ...

  5. java 入门与进阶P-6.3+P-6.4

    包裹类型 对于基本数据类型,Java提供了对应的包裹(wrap)类型.这些包裹类型将一个基本数据类型的数据转换成对象的形式,从而使得它们可以像对象一样参与运算和传递.下表列出了基本数据类型所对应的包裹 ...

  6. continue语句-死循环

    continue语句 continue 使用场景:结束本次循环,继续下一次的循环 public static void main(String[] args) { for (int i = 1; i ...

  7. Pulsar负载均衡原理及优化

    前言 前段时间我们在升级 Pulsar 版本的时候发现升级后最后一个节点始终没有流量. 虽然对业务使用没有任何影响,但负载不均会导致资源的浪费. 和同事沟通后得知之前的升级也会出现这样的情况,最终还是 ...

  8. 力扣---213. 打家劫舍 II

    你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金.这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的.同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房 ...

  9. Nginx10 Lua入门 + openresty

    1 Idea中创建Lua项目 lua官网:https://www.lua.org/ 1.1 添加插件,重启idea 1.2 创建项目 file-New Project 1.3 创建lua文件 1.4 ...

  10. Nginx 安装perl

    1 安装包下载 https://www.cpan.org/src获取最新偶数版本下载链接并替换(偶数版本为稳定版) 2 上传到服务器解压 tar -zxvf perl-5.36.0.tar.gz 3 ...