跳转到内容
技术文章
作者简介照片Sum万博新体育手机客户端anth Nandeti

SAP UI5拖放标记器功能(自定义)

  1. Sap-ui5拖放功能

在这篇文章中,我们将学习如何实现SAP-UI5控件的拖放。

我的要求是拖放令牌的Tokenizer从一个容器到另一个容器(这里我已经使用了一个VBox作为我的容器)

为了实现这一点,我们需要将Tokenizer控件扩展为可拖放控件

场景:

我们将有4组带有令牌的数据容器。这里我们需要将令牌从一个集合拖放到另一个集合

现在我将从集合A中选择一个令牌,然后我将它放在集合D中,现在它是空的。

单击并从集合a中拖动令牌

放到集合D中

你可以看到,现在它被放到了集合D中

编码:

这里我们正在拖动令牌,并在VBox的。我们需要添加“拖动信息”功能到Tokenizer。默认是禁用的。我们应该通过扩展Tokenizer控件来启用它,如下所示

//扩展标记器的代码

sap.ui.define(["sap/m/Tokenizer"], function (Tokenizer) {"use strict";返回Tokenizer.extend(“com.test.Tokenizer.util。DragTokenizer",{元数据:{聚合:{令牌:{类型:'sap.ui.core。Control',多重:true, dnd:{可拖拽:true,可拖拽:true,布局:"水平"}},头:{类型:"sap.ui.core。控件",多个:false, dnd: true}}},渲染器:{}});});

现在我们想要拖动“令牌”,所以我们需要在“拖动信息”中为我们构建的自定义令牌器指定我们要拖动的聚合。保持Source聚合为“令牌”,因为我们想要拖动令牌

// Xml的代码

     

现在我们需要指定放置令牌的位置,因此我们需要向VBox提供“放置信息”,如下所示

//删除信息的代码//

controllerName = " com.test.Tokenizer.controller < mvc:视图。View1 sap.ui.core“xmlns: dnd =”。dnd sap.ui.core“xmlns: mvc =”。xmlns:DT="com.test.Tokenizer. mvc" displayBlock="true"。util " xmlns = " sap。>< Shell id=" Shell ">< App id=" App ">< pages> < content>        < dnd:DropInfo Drop ="onTokenDrop"/>                                      <令牌类="selectedTokenText" key="{fracMappingData>WellName}" tooltip="{fracMappingData>WellName}" text="{fracMappingData>WellName}"/>         

现在可以拖放令牌了。在每拖放,我们需要删除一个项目从上一集,我们应该把它添加到新集。此功能将在删除令牌时完成

在放置令牌时,我们需要调用一个事件来执行必要的操作。对于我们有“drop”事件,我们将使用它如下所示

//功能代码//

onTokenDrop:函数(oEvent){var DragBindingContext=oEvent. getparameters ().draggedControl.getBindingContext("fracMappingData").sPath.split("/");var DragBindingBucket = DragBindingContext [1];var Dragpath = DragBindingContext [2];var = this.getView拖().getModel(“fracMappingData”). getproperty(“/”+ DragBindingBucket);var DropBindingContext = oEvent.getParameters () .droppedControl.mAggregations.items [0] .mBindingInfos.tokens.path.split(“/”);var DropBindingBucket = DropBindingContext [1];var = this.getView下降().getModel(“fracMappingData”). getproperty(“/”+ DropBindingBucket);dropped.push(拖[Dragpath]);this.getView () .getModel (fracMappingData) .setProperty(“/”+ DropBindingBucket,下降);dragged.splice (Dragpath, 1); this.getView().getModel("fracMappingData").setProperty("/"+DragBindingBucket,dragged); }

结论:

在本教程中,我打算介绍如何轻松地将任何控件设置为可拖放控件。SAP默认提供了这个属性和事件,我们只需要扩展并启用它,其余的就会就绪。

指定的标签

      5个评论
      你一定是登录评论:评论或回复一篇文章
      作者简介照片乔治·万博新体育手机客户端亚伯拉罕
      乔治·亚伯拉罕

      这真是一篇好文章!干得好,跟上。

      作者简介照片Sum万博新体育手机客户端anth Nandeti
      Sumanth Nandeti
      博客作者

      非常感谢你,乔治

      作者资料照片Tri万博新体育手机客户端tty Tang
      Tritty唐

      嗨Sumanth,

      我在一个具有拖放功能的TreeTable中使用Tokenizer(表行是可拖放的)。现在dnd似乎工作得很好,但当拖行与Tokenizer,拖鬼不显示。当拖动没有标记器的行时,此问题不会发生。我试了你的办法,但还是不管用。你知道这里发生了什么吗?你有什么解决这个问题的办法吗?非常感谢。

      作者头像郭晶晶万博新体育手机客户端
      郭晶晶

      好主意!

      我直接使用了您的解决方案,但标记器内的标记没有垂直排列。所以看起来VBox没有生效。

      所以我稍微调整一下溶液。而不是扩展m.Tokenizer,我扩展了m.FlexBox,它完美地工作。

      sap.ui.define ([
      “sap / m / FlexBox”
      ,函数(FlexBox) {
      “使用严格的”;
      returnFlexBox.extend(“sap.my.control。FlexBox”,{
      元数据:{
      聚合:{
      项目:{
      类型:“sap.ui.core.Control”,
      多个:没错,
      singleName:“项”,
      dnd: {draggable:true, dropable:false, layout:"Horizontal"}
      },
      渲染器:{}
      });
      });

      xml:

      方向= "列" alignItems = "开始"
      项= "{路径:“mymodel > /维度’}" >
      <我:dragDropConfig >
      < dnd: DragInfosourceAggregation = "项目" / >
      < /我:dragDropConfig >
      < Tokentext = " {mymodel >文本}”可编辑= " false " / >
      < /我:FlexBox >
      作者简介照片Sum万博新体育手机客户端anth Nandeti
      Sumanth Nandeti
      博客作者

      郭晶晶,

      我已经使用CSS属性在VBox中垂直对齐令牌。

      .SelectedFracMapToken .selectedTokenText {

      显示:inline-flex !重要;
      justification -content:空格!

      扩展FlexBox而不是Tokenizer也同样可以工作。这是一个很好的方法。

      谢谢你带着你的知识来到这里