`
arz611wr
  • 浏览: 13139 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

深入分析Flex[Bindable]及使用方法

阅读更多

深入分析Flex[Bindable]及使用方法
2010年09月20日
  在学习Flex的过程中,你可能会遇到Flex[Bindable]方面的问题,这里和大家分享一下,希望本文的介绍能让你有所收获。
  深入分析Flex[Bindable]及使用方法
  ◆Flex[Bindable]大概又是Flex用得最多的元数据了。刚开始用用确实好简单,效率真是没的说。不过这几天用着却碰到了些问题,我自己搜集了些资料,想着有必要在blog里总结一下吧。
  啥是元数据(metadata)
  今天不晓得为什么livedoc.adobe.com这么慢,没办法,拿不到权威的解释了。我就按自己的理解随便解释一下:首先要明白元数据不是语法的一部分,而是专门给编译器用的,说白了是告诉编译器做某些事情,学过java之类的应该知道。那Bindable来讲,它的作用是告诉flex编译器,给某些某些东西建立绑定关系,flex编译器会在编译过程中给AS(flex编译器就是把mxml编译成as,再编译到swf,也可能直接编译倒swf,我这里假设有as这么个环节)加一点事件发生和处理之类的代码,由此绑定的关系便建立了,如果我们用纯粹as3代码来写也是可以实现的,就是太太太麻烦。
  举个例子:给下面的public变量加上Flex[Bindable] ◆作为一个public变量,肯定既可以被赋值,也能赋值给别的变量。绑定的作用就是,当name改变的时候(被赋值了),可能通知其它被name影响(赋值给它们)的变量发生改变。这里的"可能"就需要编译器来判断,这就是为什么元数据是给编译器用的原因了。在mxml里用{}的语法的地方就是绑定的对象,比如label={xxx.name},当name变化,label也跟着变化。这样,我们只是很简单的改变了name的值,由于有绑定,界面上的label也跟着自动变化了,爽吧。
  能用在哪里
  三个地方:类,变量,getter/setter。是不是public没有关系,private的就只能给自家用呗。用在Class上就是简单的给所有的public属性(包括变量,getter/setter,普通方法)加上Flex[Bindable],可是一般的方法不能用Flex[Bindable]呀,于是一般就能看到flex给了个warning,直接无视:)。变量嘛就是上面讲的,很简单略掉。
  用在只读,只写属性(getter/setter)上面
  终于讲到关键地方了,因为getter和setter很像方法,用起来会有点不同。看看这个例子:  ◆原来的设想是content绑定_wholeText,可它是不工作的。为什么?_wholeText太复杂了,被编译器排除在"可能"之外,编译器认为没有绑定关系,如果只是简单的returncontent,倒是可以的。我这里搜到了一些比较权威的解释。来自http://www.rubenswieringa.com/blog/binding-read-on ly-accessors-in-flex找到ElyGreenfield讲的。 Nowkeepinmindthatthere'snowayforthecompilertoactua llytellifthevalueofapropertygetfunctionwouldbediffe rentifcalled,  
  shortofdoinganextensivecodeflowanalysisofthegetfun ction,  
  identifyingalltheinputsthatmightbeaffectingthevalu eofthegetfunction  
  (i.e.,memberfields,statics,globalsthatareusedinthe getfunctionandinanymethods,globalfunctions,closures ,etc)itmightcall,
  andsettingupwatchersoneveryoneofthosetotriggertheb indingwhenanyofthemchange.  
  That'sprohibitivelydifficult,andexpensivetodo.Soth ecompilerdoesn'ttry.  
  InsteadwhenyouputFlex[Bindable]onaget/setproperty,  
  thecompilermakesitbindablewithalittlecreativerewri tingthatallowstheframeworktowatchthegetfunction,  
  anddispatchachangeeventwhenthegetfunctionistrigger ed.Thismeansthatautomaticbindablepropertiesdon'  
  tworkwhenthegetfunctioniscomputedfrommultiplevalue s,  
  orwhenyouchangeitsvaluebysettingabackingfield,rath erthanusingthesetfunction.  
  It_also_meansthatifyouhavenosetfunction,  
  wecanprettymuchguaranteethatthere'snowayautomatica llybindablegetpropertieswillbetriggered.areadonlypr opeertyis,  
  tothecompiler,completelyopaque…atthemoment, ithasnoideawherethatvalueiscomingfrom,  
  andhencewillneverbeableto'automatically'triggerthe binding.  
  说白了就是为了降低复杂度和提高效率,复杂情况的getter会被忽略。如何解决?可以手动建立绑定,即[Bindable("eventName")]。把代码改成这样: Flex[Bindable]  
  privatevarcontent:Array=newArray();  
  Flex[Bindable]  
  publicfunctionset_content(ct:String):void  
  {  
  content=ct.split(SEP);  
  this.dispatchEvent(newEvent("_contectChanged"));  
  }  
  [Bindable("_contectChanged")]  
  publicfunctionget_wholeText():String  
  {  
  if(content.length==0)   {  
  return"";  
  }   else   {  
  var_w:String="";  
  for(vari:int=0;iflex为用户隐藏了很多底层算法。
分享到:
评论

相关推荐

    Flex Bindable 的用法

    什么是元数据(metadata):[Bindable]大概又是Flex用得最多的元数据了。

    Flex企业应用开发实战源代码

    再接着详细讲解了BlazeDS框架的使用方法和工作原理,并通过迭代的方式完整地演示一个真实的Flex企业级应用的开发全过程,实战性极强;最后重点探讨Flex应用性能优化等方面的高级知识。值得一提的是,本书公开了作者...

    FLEX企业应用开发实战.part1

     2.4.5 使用Bindable元数据标记  2.4.6 绑定到函数、对象和数组  2.4.7 使用可绑定属性链进行工作  2.5 Flex中的组件化编程  2.5.1 认识Flex组件和组件容器  2.5.2 组件生命周期与布局  2.5.3 组件的...

    FLEX企业应用开发实战.part2

     2.4.5 使用Bindable元数据标记  2.4.6 绑定到函数、对象和数组  2.4.7 使用可绑定属性链进行工作  2.5 Flex中的组件化编程  2.5.1 认识Flex组件和组件容器  2.5.2 组件生命周期与布局  2.5.3 组件的...

    bindable:使用Aurelia JS内置的设计系统,可以更快,更轻松地进行Web开发

    Bindable不仅提供CSS类列表,还提供了一种更加结构化的构建用户界面的方法。 我们发现这使我们无法一遍又一遍地重建轮子。 我们远未完成,但是Bindable现在处于其他人可能喜欢使用它的状态。 安装 npm install @...

    flex导出excel的代码

    [Bindable] private var dp:Array = [ {idx:1, names: "test1", sex: "b" }, {idx:2, names: "test2", sex: "g" } ]; public function doSelect(o:Object):void { Alert.show("行的数据分别是...

    双向数据绑定JS库Bindable.js.zip

    Bindable.js 实现了灵活、快速的双向数据绑定的 JavaScript 库。 Two-way data binding means linking properties of two separate objects - when one changes, the other will automatically update with that ...

    Flex调用xml通过DataGrid遍历简单示例

    [Bindable] private var slides:ArrayCollection private function resultHandler(event:ResultEvent):void { slides = event.result.album.slide; } private function faultHandler...

    AngularJS基础 ng-non-bindable 指令详细介绍

    AngularJS ng-non-bindable 指令 AngularJS 实例 以下段落不需要使用 AngularJS 来编译: <!DOCTYPE html> <html> <head> <meta charset=utf-8> [removed][removed] </head> <body...

    flex 绑定元数据

    算是flex初学者的的笔记吧,首先可以概览一下下文中的代码,然后我们主要是看看[Bindable]的这种用法。

    flex实列demo

    *" creationComplete="initTree();... change="iFrame.source=tree.selectedNode.path" /> ... // TODO: determine whether we can ... // TODO: add some links here to Flex sites } ]]> </mx:Application>

    flexjava交互

    [Bindable] var result:String; function sendRequest(){ var name=name1.text; var password=password1.text; ro.validateLogin(name,password); ro.addEventListener(ResultEvent.RESULT,results); } function ...

    bindable-object.js:数据绑定对象

    var BindableObject = require ( "bindable-object" ) ; var person = new BindableObject ( { name : "craig" , last : "condon" , location : { city : "San Francisco" } } ) ; person . bind ( "location....

    bindable-component:公开用于绑定处理程序的可扩展的react组件

    可结合成分 公开BindableComponent以轻松绑定组件方法以用作react中的处理程序。 还提供了BaseComponent ,唯一的区别是包含了PureRenderMixin 。安装npm install --save bindable-component用法import { ...

    backbone.marionette.bindable-router:带有木偶可绑定参数的路由器

    木偶的可绑定路径参数此路由器允许您使用前导@char 绑定控制器方法以路由参数。 路由器示例: appRoutes: { 'users/@user/edit' : 'onUserEdit' , 'users/@user/copy' : 'onUserCopy' , '*default' : 'onDefault' } ...

    aurelia-typed-observable-plugin:Aurelia的可观察和可绑定装饰器的增强实现。

    提供使用流利的语法创建自定义@observable功能: @observable.custom / @observable.custom() 提供4个基本的自定义可观察对象: @observable.date , @observable.number , @observable.string , @observable....

    Bindables:Bindables将您的自动属性转换为Wpf依赖项或附加属性

    如何使用依赖属性通过将DependencyPropertyAttribute应用于单个属性或整个类,可以将常规属性转换为依赖属性。 当您将属性应用于类时,所有可用属性都将转换为依赖项属性。 不会转换的属性是: 非汽车属性。 (具有...

    dataBindingGenerator插件

    一款 AndroidStudio插件;DataBinding插件,用于自动生成@Bindable注解和notifyPropertyChanged()方法

Global site tag (gtag.js) - Google Analytics