FloatingBehavior补遗:Location属性与move事件

简介:
  FloatingBehavior在 官方文档中的例子似乎只有对其最简单使用方式的介绍,却没有对其Location属性和move事件的说明。虽然它们非常简单,我想可能还是需要了解一下 的。FloatingBehavior的Class Library在本人前面的文章《 补充部分官方文档里没有的Client Library以及代码提示Schema更新 》中有说明。我们从一个简单的例子来看这两个成员:

  首先,我们定义一些CSS类:
< style >
    body 
{  font-family :  Arial ;  font-size :  12px ;   }
    #handle 
{  background-color :  #EEEEEE ;   }
    #floatDiv 
{  width :  100px ;  border :  solid 1px black ;  height :  100px ; }
    .red 
{ color :  red ; }
</ style >

  注意在使用FloatingBehavior时需要引入AtlasUIDragDrop这个Framework Script:
< atlas:ScriptManager  ID ="ScriptManager1"  runat ="server" >
    
< Scripts >
        
< atlas:ScriptReference  ScriptName ="AtlasUIDragDrop"   />
    
</ Scripts >
</ atlas:ScriptManager >

  然后是所需的HTML元素:
< div  style ="height:300px; border:solid 1px black;" >
    
< div  id ="location" > Drop to change color. </ div >
    
< div  id ="floatDiv" >
        
< div  id ="handle" > Handle </ div >
        
< div > blablabla </ div >
    
</ div >
</ div >

  其中最外层的高300px的容器,这个是拖动的有效区域。只有在页面范围内的拖动才会有效,这也就是为什么有朋友会遇到在自己的例子中拖动后会回到原处的情况,这是因为简单的例子页面区域就是很小的一块,所以被拖动的元素无法停留。

  接下来就是最重要的Atlas Script了:
< script  type ="text/xml-script" >
    
< page  xmlns:script ="http://schemas.microsoft.com/xml-script/2005" >
        
< components >
            
< label  id ="location" >
                
< bindings >
                    
< binding  dataContext ="floating"  dataPath ="location"  property ="text"   />
                
</ bindings >
            
</ label >
            
< control  id ="floatDiv" >
                
< behaviors >
                    
< floatingBehavior  id ="floating"  handle ="handle"  location ="100, 50" >
                        
< move >
                            
< invokeMethod  target ="location"  method ="toggleCssClass" >
                                
< parameters  className ="red"   />
                            
</ invokeMethod >
                        
</ move >
                    
</ floatingBehavior >
                
</ behaviors >
            
</ control >
        
</ components >
    
</ page >
</ script >

  FloatingBehavior的move事件会在浮动元素落在有效范围内(上面的例子里则是最外层高300px的div)触发,触发时 id为location的div的前景色会在红与白之间切换。而FloatingBehavior的Location属性以字符串“x, y”形式设定了浮动元素的坐标,在set_Location内部Behavior会调用Sys.UI.Control.setLocation“静态”方 法来设置浮动元素的位置。自然,我们能通过binding来访问这个属性,可以看到在id为location的div里会根据当前behavior的 location当前值而改变。如果将浮动元素拖动至有效范围外的话,那么它就会回到原处,move事件也不会触发。

  很自然,move事件除了使用Xml Element形式调用Action之外,也能以填写Xml Attribute来调用javascript方法。先修改上面一行Atlas Script代码以Xml Attribute方法调用comfirmDrop函数:
< floatingBehavior  id ="floating"  handle ="handle"  location ="100, 50"  move ="confirmDrop" >
    ...
</ floatingBehavior >

  再增加一个javascript函数:
< script  language ="javascript" >
    
function  confirmDrop(sender, args)
    {
        
var  msg  =   " Do you really want to drop the control at  "   +  sender.get_location()  +   " ? " ;
        
if  ( ! confirm(msg))
        {
            args.set_canceled(
true );
        }
    }
</ script >

  在这里,sender就是那个当前的FloatingBehavior对象,而args就是大名鼎鼎的 Sys.CancelEventArgs!因此我们能够相当方便的使用args.set_canceled(true)来取消这次移动。在示范中也可以很 方便的看出,如果用户在Confirm Dialog中选择了“Cancel”,那么漂浮的控件就会回到原处。

  这个就是对FloatingBehavior的Location属性和move事件的介绍,可以看出,有了binding,Declarative Syntax本身又是多么的优雅。有了Atlas,编写javascript代码有多么的轻松。

  本文所用例子的源代码,可以点击这里下载。如果您希望查看效果,请点击这里


本文转自 jeffz 51CTO博客,原文链接:http://blog.51cto.com/jeffz/60950,如需转载请自行联系原作者

相关文章
|
存储 数据处理
什么是迭代,什么是可迭代对象
什么是迭代,什么是可迭代对象
748 1
|
机器学习/深度学习 人工智能 搜索推荐
人工智能与体育:运动员表现分析
【10月更文挑战第31天】随着科技的发展,人工智能(AI)在体育领域的应用日益广泛,特别是在运动员表现分析方面。本文探讨了AI在数据收集与处理、数据分析与挖掘、实时反馈与调整等方面的应用,以及其在技术动作、战术策略、体能与心理状态评估中的具体作用。尽管面临数据准确性和隐私保护等挑战,AI仍为体育训练和竞技带来了新的机遇和前景。
|
存储 缓存 运维
缓存技术有哪些优缺点呢
【10月更文挑战第19天】缓存技术有哪些优缺点呢
|
11月前
|
数据安全/隐私保护
什么是正向代理
正向代理是网络代理的一种形式,作为客户端与外部服务器间的中介,接收并转发客户端请求至目标服务器,再将服务器响应转回给客户端。适用于访问受限资源、保护隐私及跨境访问等场景,增强客户端的灵活性和安全性。
291 0
|
Linux
Linux 目录 rc0.d 是干什么的
【6月更文挑战第22天】Linux 目录 rc0.d 是干什么的
570 55
2024年 | 9月云大使推广奖励规则
【近期云大使规则升级】①上线企业云大使提现功能。②增加返利订单类目。③优化推广奖励限制。④提升首购后订单返利比例。⑤新增沉睡用户返利 。⑥推荐企业认证新用户首购最高奖励45%。
|
运维 监控 应用服务中间件
自动化运维的新篇章:Ansible Playbooks入门与实战
【9月更文挑战第1天】在追求效率和稳定性的今天,自动化运维已经成为IT行业的必修课。本文将带你走进自动化工具Ansible的世界,通过实战案例深入理解Ansible Playbooks的编写和应用。文章不仅介绍基础概念,更通过具体代码示例,展示如何利用Ansible简化日常运维任务,提升工作效率。无论你是运维新手还是希望深化自动化技能的资深人士,本指南都将为你开启一段新的学习旅程。
|
域名解析 网络协议 Serverless
函数计算操作报错合集之遇到“connection errored out”的错误,该怎么办
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
755 2
|
前端开发 JavaScript PHP
【软件设计师备考 专题 】类程序设计语言主要特点和适用情况
【软件设计师备考 专题 】类程序设计语言主要特点和适用情况
308 1
|
存储 大数据 云计算
云计算和大数据以及两者的区别
云计算大数据是现在比较热门的词,其具体应用领域也比较多,很多人对于云计算和大数据二者分不清,什么是云计算大数据?大数据和云计算有什么区别?大家可以看看下文来详细了解下。
2555 21
云计算和大数据以及两者的区别