• 72.50 KB
  • 19页

【计算机软件毕业设计】安装项目成本管理系统收支管理子系统的设计与实现-文献翻译

  • 19页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'文献翻译使用数据绑定本文译自:AlaricCole,ElijahRobison.LearningFlex4.O’Reilly.2010.P137-P150数据绑定意味着多个值绑定在一起使得某个值得变化会作用于其他值。数据绑定通常发生在一个方向上,涉及唯一的数据源和目标值。如果数据源值发生变化,数据绑定会把变化强加于目标值上。Flex也提供了双向或称双向作用的数据绑定。对于双向数据绑定而言,绑定语句的任何一方都可以作为数据源或者目的而存在。你可以使用内联ActionScript或者特定的标记来实现数据绑定。单向绑定在数据绑定的大多数基本用法里,一个类的属性或者变量被传递到另一个类的属性或者变量中。让我们看一下语法。首先,代表数据源的组件必须具有一个有效的id特征。其次,绑定接收方——目标——由花括号({和})定义,它括起了数据源。花括号中的空格在属性被处理时会被忽略掉。在MXML特性定义里,花括号创建数据绑定。如果没有花括号的话,目标组件的text属性将变成nameTI.text。这是Flex里最简单也最常用的数据绑定。绑定变量在一个Script/CDATA块中的String变量和一个TextInput控件的text属性之间的单向绑定。[Bindable]元数据标记(metatag,或者metadatatag),把String变量fullName标识成数据绑定的数据源。同样,在MXML组件的特性声明中的花括号告诉Flex编译器把控件的text属性绑定到该变量。如果没有花括号的话,Flex会把直接量字符串fullName赋值为控件的文本。花括号告知Flex监听变量值的变化。所以如果AlaricCole被改成ElijahRobison,目标值也会相应更新。另一方面,如果[Bindable]元数据标记没有在Script/CDATA块中的变量定义之前出现的话,变量将被设置成它的初始值,但是该变量的变化无法反应到应用程序的其他地方。那么,为什么可绑定元数据标记是必需的呢?当你创建绑定时,无论你是通过标记还是脚本的方式来实现,Flex在幕后都会编写大量的ActionScript来为变量值的变化创建监听器。如果没有显示指令来指出哪些可以绑定而哪些又不能绑定的话,Flex将会为那些你可能不希望绑定的变量创建一大批无用的代码,而这些代码会让你的应用程序膨胀从而可能影响它的性能。串联既然我们讲到了数据绑定和动态文本,我们也可以顺便说一下串联。串联把一块块的国歌文本字符串联合并起来。显而易见,数据绑定帮助管理应用程序中动态的、变化的值。所以,如果我们设计一个需要用户登录的站点,我们可能希望在整个应用程序的选择位置里包含用户的名字。正如脚本中的注释所描述的那样,我们假定firstName和lastName变量将由服务器在用户登录后动态赋值。空白符和内联绑定第一个串联插入了firstName和lastName来创建一个问候词。请留意编译器是如何保留引号里的空白符的。第二个串联也使用了空白符来生成更友好的问候词。不过,我们修改后的代码,也能产生相同的结果。注意在绑定花括号里的额外空白符。Flex编译器忽略了内联表达式中的空白符,所以这些修改不会导致结果的变化。请和我们呆在这儿,因为我们正在制作这个“重要的消息”。花括号之间的ActionScript你还有另外一种方法来实现内联串联。前例利用了双引号引起的MXML属性赋值里的空白符合直接量文本。不过,正如例子所演示的那样,整个串联也可以使用绑定和内联ActionScript来实现。单引号(‘’)用来把直接量文本从变量绑定中区分出来。这种实现方式与前面的方式有一些差异。在花括号中的空白符依然被忽略,但是现在我们必须显式地在串联中创建空格,所以我们在加法操作符(+)后加了一个空格字符串(‘’)。 这种在花括号中串联一个文本字符串的方法是不是看起来很熟悉?是的,因为它就是ActionScript!当你像例子那样构建一个串联时,你实际上在使用内联ActionScript。在花括号中发生的一切都是ActionScript。标记如果你开发的是大型应用系统,你就能体会到把声明分离成一个单独代码块的好处。我们前面的例子使用过了花括号和内联ActionScript来把数据源值绑定到它们的目标上。这没有问题,它也是建立绑定的常用方法。不过,你可能会发现内联绑定允许目标“过多了解”它们的数据源。这是因为,在把一个text属性绑定到一个变量的情况下,特征标记将会显式地指向变量。幸运的是,有一种是用MXML标记创建数据绑定的方式,接下来我们会讨论它。基本用途运行它,结果看起来应该与上例一致。事实上,这两个例子在功能上是相同的。如果不考虑我们是通过MXML标记来声明数据绑定的话,这个例子与上例之间仅仅有一个差异。差异在于:上例的代码不需要目标控件的id,因为destination是由内联绑定来确定的。然而,当我们使用标记时,两个控件都必须要有一个唯一id。有人可能会说标记将强迫你更多地考虑数据绑定关系中的source和destination,所以这也是MXML绑定相较于内联绑定来说的一个优势所在。多重数据源标记的优势之一在于它能够为一个目标指定多个数据源。比如,我们可以把一个Label控件的text绑定到两个或者更多的数据源。你可以通过定义多重标签来实现它。 在上面的代码中,一个标记的text属性被绑定到两个不同的TextInput控件上。如果oneTextInput发生变化,它的值会被复制到标签控件上。同样,如果anotherTextInput发生变化,它的值也会被复制到标签控件上。当然,在这个示例中,你没有必要一定要用标记来绑定两个数据源。虽然花括号表达式不能同时指定多个数据源,但你可以将它结合标记一起使用。不过,同时使用花括号表达式和标记会让Flex产生困扰。双向绑定Flex4引入了一个新功能来创建双向绑定,有时也被称为双向作用的绑定。双向绑定允许绑定表达式的任意一方作为数据源或者目标存在。当一方变化时,另一方会接受这个变化。你可能会感到困惑,“为什么这不会导致一个无限循环?”那是因为双向绑定的机制决定了它仅仅接受用户界面产生的变化。在Flex以前的版本中,双向绑定要求编写两个独立的绑定表达式来交换数据源和目标对。不过Flex4提供了本地双向数据绑定。 首先请留意标记附带的twoWay特征。当twoWay特性被设置成true时,标记就创建了在它的source和destination值之间的双向绑定关系。第二对TextInput控件演示了使用简短语法的双向绑定。在花括号之间的地址符号(@)表明参与的组件之间存在双向绑定。如果你测试这段代码,你会发现这两种双向绑定的实现产生了相同的结果。所以这对你来说可能是个问题,你喜欢那种语法——标记还是内联脚本。使用数据模型处理复杂数据数据模型是带有多个属性的单一对象,你可以用它来在一个地方存储大量的相关信息。Flex通过数据模型来使得存储结构化信息变得简单,而正如我们会看到的那样,你可以借助于数据绑定所给予的有用机制来从这个灵活组件中获益。搭建数据模型数据模型可以帮助你组织你的代码,它们很实用。比如,当你从一个服务器那儿取数据时,比较好的做法是抓取一大堆相关的数据,例如一个人的名字、电子邮件和地址,然后把结果存储到一个模型中以便后续使用。JohnDoe{contact.name.first}{contact.name.last}john.doe@foo.com555-555-555这个模型允许我们把用户信息存储到一个集中地地方,便于阅读和理解。注意XML结构的根节点是个名为的标记。创建合法的XML时必须包含根节点标记,但是你可以用任何你想要的名字来命名根节点,单纯“info”并不是必须的。 数据模型之美在于它可以使用点标记在你的应用程序中的任何地方访问数据模型的信息。比如,如果你要访问前例中模型里的电话号码,你尅使用表达式contact.phone。不过不幸的是,虽然你能够使用点标记法来访问模型的数据,代码完成功能却无法识别模型中所使用的标记,所以你需要自己记住模型的结构。多级绑定例子建立了一个数据模型并为它设置了一些默认信息。不过,请注意下面标记中的代码:{contact.name.first}{contact.name.last}模型通过绑定和串联它自己的内容中可用的first和last名字属性来建立contact的全名。那么,我们最初的有关这个客户数据会从服务器那儿不断涌来的想法又如何呢?实际上,通过双向绑定,模型中的信息不仅可以起源于服务器,而且它也能在值发生变化时重新提交给服务器。这些绑定关系的交织就构成了多级绑定。虽然我们无法模拟出这个例子里的服务器,但我们还是能够演示整个数据输入的交互过程,然后再结束模型。什么时候不适合使用数据绑定虽然数据绑定很强大也很方便,但它并不总是最佳方案。如果你的应用程序依赖于定时机制来显示数据,数据绑定就不合适,因为你无法控制什么时候触发绑定。当绑定快速且持续产生时,它也会造成很多问题。比如,由于每次绑定的数据源值发生变化就会触发绑定,对于那些密集且频繁更新的数据源来说,依赖于它的多个属性会导致绑定过于频繁而影响处理的性能。在这些情况下,使用ActionScript来处理你的数据赋值会是更明智的选择。参考文献[1]JoshuaNoble,ToddAnderson.Flex3Cookbook[M].O"Reilly.2008[2]AlaricCole,ElijahRobison.LearningFlex4.O’Reilly.2010[3]陈爽,付凯,Flex与ActionScript程序开发,清华大学出版社,北京交通大学出版社,2010 原文:UsingDataBinding原文出处:AlaricCole,ElijahRobison.LearningFlex4.O’Reilly.2010.P137-P150WhatIsDataBinding?Byitsname,databindingimpliesmultiplevaluesboundtogethersothatachangetoonevalueaffectstheother.Databindingtypicallyoccursinonedirectionandinvolvesuniquesourceanddestinationvalues.Ifthesourcevaluechanges,databindingimposeschangesonthedestinationvalue.Flexalsoofferstwo-way,orbidirectional,databinding.Fortwo-waydatabindings,eithersideofabindingstatementcanbehaveasthesourceorthedestination.YoucanimplementdatabindingusingeitherinlineActionScriptorthespecialtag,andinthischapterwecoverexamplesofboth.ApplyingDataBindingThefollowingsectiondemonstratescommonimplementationsofdatabinding.Becausethesyntaxallowsafewdifferentoptions,youcanchooseyourpreferredapproachwhenprogrammingdatabindingintoyourownapplications.One-WayBindingInthemostbasicusageofdatabinding,aclasspropertyoravariableistransferredtoanotherclasspropertyorvariable.Example8-1demonstratesinlinedatabinding,andthetextpropertyofnameTIisboundtothetextpropertyofanotherTextInputcontrol.Example8-1.One-way,inlinedatabinding Let’sconsiderthesyntax.First,thecomponentrepresentingthesourcemusthaveavalididattribute.Second,thebindingrecipient—thedestination—isdefinedbycurlybraces({and}),whichwrapthesource.Whitespaceinsidethebracesisignoredwhenthepropertyisrendered.WithintheMXMLattributedefinition,curlybracescreatethedatabinding.Withoutthem,thedestinationcomponent’stextpropertywouldbecomenameTI.text.ThisisthesimplestandmostcommonusageofdatabindinginFlex.AsyoucanseeinFigure8-1,thetextforbothcomponentsisidentical.ChangestothetextpropertyofnameTItransferredautomaticallytothesecondTextInput.BindingVariablesExample8-2demonstratesone-waybindingbetweenaStringvariableinaScript/CDATAblocktoaTextInputcontrol’stextproperty.Example8-2.One-waybindingbetweenavariableandacontrolpropertyThe[Bindable]metatag,ormetadatatag,identifiestheStringvariablefullNameasasourcefordatabinding.Again,bracesintheMXMLcomponent’sattributedeclarationtelltheFlexcompilertobindthecontrol’stextpropertytothevariable. Withoutthebraces,FlexwouldassigntheliteralstringfullNameasthetextofthecontrol.Likewiththefirstexample,thebracestellFlextolistenforchangestothevariable’svalue.SoifAlaricColewerechangedtoElijahRobison,thedestinationvaluewouldupdateitselfaccordingly.Conversely,ifthe[Bindable]metatagdidnotprecedethevariabledefinitionintheScript/CDATAblock,thevariablewouldberecognizedforitsinitialvalue,butchangestothevariablewouldnotbereflectedelsewhereintheapplication.So,whyisthebindablemetatagnecessary?Whenyoucreatebindings,eitherthroughatagorviascript,FlexwritesalotofActionScriptbehindthescenes,creatinglistenersforchangestothevariable’svalue.Withoutexplicitinstructionsrelatingwhatisandwhatisn’tbindable,Flexwouldcreateabunchofuselesscodeforvariablesthatyoumaynotwanttobebindable,andthatcodewouldmakeyourapplicationbloatedandcouldpotentiallyhurtperformance.MultipleDestinationsNothinglimitsbindingexpressionstoasingledestination.Example8-3demonstratesabindingbetweenonesource,thetextpropertyofmainTI,andthreedestinations,TI1,TI2,andTI3.SeeFigure8-2forademonstrationofhowitlookswhilerunning.Example8-3.Bindingasinglesourcevaluetothreedestinations ConcatenationWhilewe’reonthetopicsofdatabindinganddynamictext,it’spertinenttodiscussconcatenation.WediscussedconcatenationpreviouslyinChapter5,butitmakessensetoreviewthetopicwithinthecontextofdatabinding.Asyou’llrecall,concatenationiscombiningmultiplestringsoftextinapiecemealfashion.Obviously,databindinghelpsmanagedynamic,changingvaluesthroughoutanapplication.So,ifwedesignedasitethatrequiredauserlogin,wemightwanttoincludetheuser’snameinselectlocationsthroughouttheapplication.Example8-4demonstratesbindingsinaconcatenatedgreeting,andFigure8-3showshowitlooks.Example8-4.Bindingsandinlineconcatenation Asnotedbythescriptcomments,weassumethefirstNameandlastNamevariableswillbeassigneddynamicallybytheserverafterauserlogin.WhitespaceandinlinebindingsInExample8-4,thefirstconcatenationinsertsfirstNameandlastNametocreateagreeting.Notehowthecompilerpreservedwhitespaceinsidethequotationmarks.Thesecondconcatenationalsouseswhitespacetorenderthehuman-friendlygreeting.Figure8-3illustratedtheresult.However,thefollowingmodificationstoourcode,showninExample8-5,wouldproduceidenticalresults.Notetheextrawhitespaceinsidethebindingbraces.TheFlexcompilerignoreswhitespacewithininlineexpressions,sothesechangeswon’tcompromisetheresult.Staywithushere,becausewe’rebuildinguptothe“take-homemessage.”ActionScriptbetweenthebracesThere’sanotherapproachtoconsiderregardinginlineconcatenation.ThepreviousexampletookadvantageofwhitespaceandliteraltextwithinthedoublequotesofanMXMLpropertyassignment.AsExample8-6demonstrates,however,theentireconcatenationcanbehandledusingbindingsandinlineActionScript.Singlequotes("")distinguishliteraltextfromthevariablebindings.Ahandfulofdifferencesexistbetweenthisandourformerapproach.Whitespacebetweenthebracesisstillignored,butnowwehavetoexplicitly createspacingwithintheconcatenation,aswedidusingtheadditionoperator(+)followedbyaspacingstring("").Doesthismethodofconcatenatingatextstringinsidebracesseemfamiliar?Itshould,becauseit’sActionScript!WhenyoubuildaconcatenationliketheoneinExample8-6,you’reactuallyusingmoreinlineTheTagInlargerapplications,youmightfinditusefultoseparateyourbindingdeclarationsintoaseparateblockofcode.OurpreviousexamplesusedcurlybracesandinlineActionScripttobindsourcevaluestotheirdestinations.Thisisfine,andit’sthetypicalwaytoestablishbindings.However,youmightfindthatinlinebindingsallowdestinationsto“knowtoomuch”abouttheirsources.That’sbecause,inthecaseofbindingatextpropertytoavariable,theattributetagwouldrefertothevariableexplicitly.Fortunately,there’sawaytocreatedatabindingsusingMXMLtags,whichwediscussnext.BasicusageExample8-9demonstratesabindingusinganMXMLtag.Runthis,anditwilllookidenticaltoFigure8-1.Infact,bothexamplesarefunctionallyidentical.Disregardingthefactthatwe’redeclaringthedatabindinginanMXMLtag,there’sonlyonedifferencebetweenthisexampleandExample8-1.Canyouseeit?Thedifferenceisthis:thecodeforExample8-1didnotrequireanidforthedestinationcontrol,becausethedestinationwasimpliedbytheinline binding.Withthetag,however,bothcontrolsmusthaveauniqueid.Example8-9furtherprovidedanopportunitytoemphasizecasesensitivityinvariablenamesbydistinguishingtheboundcontrolsfromoneanotherusingasingle,strategiccapitalletter.Somemightsaythetagforcesyoutothinkmoreintentlyaboutthesourceanddestinationofadata-bindingrelationship,sothismightrepresentanadvantagethatMXMLbindingshaveoverinlinebindings.MultiplesourcesWediscussedbindingasourcetomultipledestinationsinExample8-3.However,abenefitofthetagisthepotentialtospecifymultiplesourcesforadestination.Forexample,it’spossibletobindaLabelcontrol’stexttotwoormoresources.Youaccomplishthisbydeclaringmultipletags,asdemonstratedinExample8-10.Example8-10.MultiplesourcesdeclaredusingMXMLbindingtagsInthiscode,thelabel’stextpropertyisboundtotwodifferentTextInputcontrols.IfoneTextInputchanges,itsvalueiscopiedintothelabel.IfanotherTextInputchanges,itsvalueiscopiedintothelabel.Itisn’tnecessarytousetagsforbothbindingdeclarationsinthisexample.Whilecurlybracesalonecan’tdesignatemultiplesources,curlybracescanbeusedinconjunctionwithantag.However,usingcurlybraceswithantagcanbecomeconfusing.ConsiderthecodeinExample8-11,whichhasidenticalfunctionalitytoExample8-10butusesantaginconjunctionwithaninlinebindingtotetherthe labeltotwodifferentTextInputcontrols.CurlyBraceSyntaxVersusBindingTagsThetagoffersessentiallythesamefunctionalityascurlybraces,justadifferentwayofapproachingit.Withthetag,youcanorganizeyourbindingstogetherinacentralareaofthecode.Plus,ifyouhaveasituationrequiringsuchfunctionality,youcanbindasingledestinationtomultiplesources.Ontheotherhand,becauseyou’relimitedtoonesourceandonedestination,youcan’tcreateintricatebindingslikeyoucanwithmultiplesetsofcurlybraces.Two-WayBindingsFlex4introducedanewabilitytocreatetwo-waybindings,sometimesreferredtoasbidirectionalbindings.Two-waybindingsalloweithersideofthebindingexpressiontoactasthesourceorthedestination.Whenonesidechanges,theothersideabsorbsthechange.Youmightwonderwhythisdoesn’ttriggeraninfiniteloop,butthesetwo-waybindingmethodsonlyconsiderchangestriggeredthroughtheuserinterface.InthepreviousversionofFlex,bidirectionalbindingrequiredwritingtwoseparatebindingexpressionsthattradedsourceanddestinationpairs.However,Flex4offersnativetwo-waydatabinding.Example8-12demonstratestwo-waydatabindingusingbothantagandinlinescript. Tobeginwith,noticethetwoWayattributeattachedtothetag.WiththetwoWaypropertysettotrue,antagcreatesabidirectionalbindingrelationshipbetweenitssourceanddestinationvalues.ThesecondpairofTextInputcontrolsdemonstratestwo-waybindingusingshorthandsyntax.Theatsymbol(@)precedingthebracesindicatesabidirectionalbindingbetweenthetwoparticipatingcomponents.Ifyoutestthatcode,you’lldiscoverbothimplementationsoftwo-waybindingyieldidenticalresults.It’smostlyaquestionofwhichsyntaxyouprefer—tagsorinlinescript.HandlingComplexDatawithDataModelsAdatamodelisasingleobjectwithmultiplepropertiesyoucanusetostorealotofrelatedinformationinoneplace.Flexmakesiteasytostorestructuredinformationindatamodels,andaswewillsee,databindinggivesusausefulmechanismtobenefitfromthisflexiblecomponent.BuildingtheDataModelDatamodelscanhelpyouorganizeyourcode,andtheycanbequitepractical.Forinstance,whenyou’repullingdatafromaserver,it’sgoodpracticetograblumpsofsimilardata,suchasaperson’sname,email,andaddress,andthenstoretheresultinamodelforlateruse.Example8-13demonstratesthedatamodel.Doyouseesomethingnew?Thedatamodelmustbedeclaredwithinablock,whichwe’vebeenpronetodeletingsincewehaven’tbeenusingit. JohnDoe{contact.name.first}{contact.name.last}john.doe@foo.com555-555-555Thismodelallowsustostoreuserinformationinacentrallocationthat’seasytoreadandunderstand.NoticetherootoftheXMLstructureisatagcalled.AroottagmustbeincludedtocreatevalidXML,butyoucancalltherootanythingyouwant;theword“info”isn’tarequirement.Thebeautyofadatamodelisthatitaccessesthemodel’sinformationelsewhereinyourapplicationusingdotnotation.Forinstance,toaccessthephonenumberfromthemodelinthepreviousexample,you’dusetheexpressioncontact.phone.Unfortunately,althoughyoucanaccessthemodel’sdatausingdotnotation,codecompletionwon’trecognizethetagsusedinthemodel,soyou’llneedtomakeapointtorememberthemodel’sstructure.MultilevelBindingsExample8-13establishedadatamodelandpopulateditwithsomedefaultinformation.However,noticethefollowingcodeinsidethetag:{contact.name.first}{contact.name.last}Themodelbuildsthecontact’sfullnamebybindingandconcatenatingthefirstandlastnamepropertiesavailablewithinitsowncontent.Also,whataboutouroriginalnotionthatthiscustomerdatawaspouredinfromaserver?Well,withtwo-waybinding,informationinthemodelcannot onlyoriginateattheserver,butitcanberesubmittedtotheserverwhenitsvalueschange.Themixtureofthesebindingrelationshipsconstitutesmultilevelbinding.Althoughwecan’tsimulatetheserversideofthisexample,wecandemonstratetheoverallinteractionofdataenteringandthenexitingthemodel.WhenDataBindingIsn’tAppropriateAlthoughit’spowerfulandeasy,databindingisn’talwaysthebestsolution.Ifyourapplicationreliesonatimingmechanismtodisplaydata,databindingwouldn’tbeappropriate,becauseyouwouldn’thavecontroloverwhenthebindingistriggered.Bindingscanalsocreateissueswhenthey’rerapidlyandrepeatedlyfiring.Forinstance,abindingfireswheneveritssourcevaluechanges,soseveralpropertiesrelyingonadenseandfrequentlyupdatedsourcemayfirebindingstoooften,hurtingperformanceintheprocess.Inthesecases,itmaybewisertohandleyourdataassignmentsinActionScript.译文要求1、译文内容必须与课题(或专业)内容相关,并需注明详细出处。2、外文翻译译文不少于2000字;外文参考资料阅读量至少3篇(相当于10万外文字符以上)。3、译文原文(或复印件)应附在译文后备查。 译文评阅导师评语(应根据学校“译文要求”,对学生外文翻译的准确性、翻译数量以及译文的文字表述情况等作具体的评价)(要求手写)指导教师:年月日'

您可能关注的文档