PureMVC的专项学习笔记 | |
1.PureMVC的四个主要结构类. | 1.Model ---Proxy 2.View ---Mediator 3.Control ---Command 4.Facade -管理Proxy Mediator Command的类 |
2.在本例中MVC是这样划分的 | 1.Model -- 由VO 和 Proxy组成 2.View -- 由两个view组件和两个对应的Mediator组成 3.Control -- 由一个MacroCommand和若干个simpleCommand组成 4.Facade -- 即ApplicationFacade 5.启动页 -- 由MyPureMVCDemo.mxml来启动 |
pureMVC中的Command分为两种:多命令和单一命令,即MacroCommand和SimpleCommand。MacroCommand中通过addSubCommand(SimpleCommandName)来加入子命令,两个Command中的方法都需要被重写override,此外还需要通过facade.registerCommand(...)注册命令
| |
都是单例模式的,用户无需操作那Model,View,Controller类,而用户只需要操作Facade就够
|
ApplicationFacade extends Facade implements IFacade 为什么Facade实现了IFacade,在这里还要写上IFacade
|
在代码提示里,不会弹出Facade的getInstance()方法 instance是Facade的实例属性,子类可以去继承它。 | |
当有人发送一个STARTUP的消息时,程序就自动生成一个StartupCommand来处理。
| |
基本上Mediator只对用户的操作或用户提交的数据进行封装并简单预处理
| |
当你改变了UI时,只需要对Mediator进行相应的改变就行了,而你改变了业务的逻辑与算法之类的话,也相应的改变Command就可以了,对其它模块的影响不大
| |
Command类是短生命周期的,也就是说,当有消息通知需要用到该Command进行处理时,Facade就会创建这个Command类,并将数据传入Command里面进行处理,当处理完成后,其生命周期就会结束
| |
有就是Proxy类只会发送“消息”(通知),而不会接收任何消息,而Mediator与Command则可以发送与接收,所以你不能直接发消息通知Proxy去加载数据,而是通过引用Proxy的实例调用相关的函数
| |
我们还看到了有一个initializeController( ) 的函数,当这个ApplicationFacade被实例化加载的时候,会先自动调用initializeController( ) 这个函数,所以,我们应当在ApplicationFacade在被初始化的时候,就对Command进行注册,
| |
一个Command必需要实现ICommand接口,而如果是一个单Command的话,就需要继承SimpleCommand类,而如果是一个Command链的话,就需要实现MacroCommand
| |
就可以在一个Proxy里管理,而同理,中介器也一样,一个中介器对一个Flex组件,但为一个Button建立一个中介器未名太浪费了,所以我这里都是将MP3分成三个部分,控制按钮部分,歌曲列表部分,播放进度部分,三个部分用三个中介器
| |
。通常这些中介器或者Proxy创建一次就可以了,Facade会将它它存放在数组中,当需要用到时,再由Facade来获取他们,所以,在注册代理与中介的时候,先实例化它们再注册!
| |
因为Command是短生命周期,而Proxy与Mediator是长生命周期,所以这里与Command有点区别
| |
因为Proxy是只可以发信息,不可以收信息,所以你叫Proxy工作的话,只好得到它的引用再调用它的方法来控件它的工作。注意,在Facade重新获得代理的方法里facade.retrieveProxy(PlayListProxy.NAME) as PlayListProxy 你需要指定一个字符串来获取某一个代理,在编写每一个代理时,都要为它指定一个name的字符串,而且是代理的唯一标识!
| |
不会, 对于构造函数的参数,以及构造函数中的super()参数的设定,该如何设定。 | |
Mediator子类的构造函数的参数,第一值默认是mediator的name,而在hoolai和别人的demo里面,都会把这个name属性去掉 | |
在flex builder环境中,显示行号: 点击debug点号小竖栏-->右键选择show line numbers | |
在Proxy的子类里,在任何地方都可以调用data, 不会 | |
这个父类的方法,其实Proxy的构造函数接收两个参数,一个是Proxy的唯一标识名字,另一个就是所需要作代理的数据,是一个Object,就是说,你的这个Proxy类要对哪些数据作代理呢?就是这个值传入的,在Proxy基类里面有一个data的属性,这个属性就是存放你的实际数据
| |
当接收数据成功时,调用了 onResult 方法,里面进行了XML简单的分析,其实可以将该分析操作交给一个Command来完成,但是这里确实是太简单的分析了,就没有必交给Command了,自已来完成吧
| |
我在上上上面说过,Proxy只会发,不会收,所以肯定不是其它Proxy对这消息有兴趣,而Command么,Command感兴趣的消息都是在Facade里给绑定的,而我们上上上面的代码中,Facade只绑定了STARTUP这个消息,所以现在唯一下来的,就是中介器了,因为中介器也是可以收与发消息的
| |
在StartUpCommand这里面的事件都是在ApplicationFacade里定义的的 | |
数据都存在哪里的? 1.直接存在swf里 2.存在so里 3.存在后端数据库里 | |
metadata的那种声明事件的方法要学会。。 | |
绑定方法的时候写成这样可以:enabled="{judgeEnabled(email.text,password.text)}"。不能直接写成方法{judgeEnabled()}。 | |
如果把flex项目换了个路径,那么再打开文件的时候,会提法说 Resource 。。。does not exist! | 后来发现项目文件夹路径不能随便改! |
以什么样的数据添加到datagrid里面的,当我去点击它取它的时候,selected就是什么格式的。 比如这个项目,传进去的是UserVO 我现在通过selectedItem 拿到的也还是 UserVO. | |
PureMVC 练习时的注意事项 1.主文件里实例化facade. 把主要的UI都放进去 2.第二步创建VO 3.UserForm 和UserList都有公共的持有别人需要的数据的变量 4.Mediator 把监听到的ui组件的event,能ApplicationFacade 事件的形式,sendNotification给大家。 5.sendNotification的时候,传的第二个参数,叫做内容体,对方需要什么就传什么。 6.Mediator都有一个NAME 静态属性,用于传给super()的第二个参数 不会 7.Mediator的构造函数只传一个参数,就是viewcomponent 这个viewcomponent 在这个Mediator类里是全局的。 8.ApplciationFacade里面要做四件事情 1).把事件名都准备好 2).写好getInstance()方法 3).要写好startUp方法 4).要定好initializeController这个方法,这里面至少把START_UP这个消息注册上。 9.StartupCommand这个方法继承自MacroCommand这个command ,里面要addSubCommand两个Command,一个是ModelPrepCommand 一个是ViewPrepCommand 另外还要做一件事情是 ,注册上项目中具体的消息和Command 且上述这些都要放到initializeMacroCommand里面 10.ModelPrepCommand里面要注册上Proxy 11.ViewPrepCommand里要注册上所有具体的Mediator.因为在Meditor里要加上具体的view. 具体的view可以通过notifcation.getBody().{那个具体view在mainApp里面的id} 12.ModelPrepCommond 和 ViewPrepCommand 这两个Command 都继承自 SimpleCommand 13.UserListMediator的一个作用是把proxy中存的数据赋值给viewComponent. 14.Mediator 和 Proxy 中都有get 15.Proxy中有data这个公共属性 16.Proxy只发送,但不接收notification 17.在具体的command中,操作都是这样的:调用notification.getBody()拿到数据,然后retrieve proxy来执行操作 18.retrieveProxy方法出现在过Command里面,也出现在过Mediator里面。 19.具体的Command里面只有excute这一个方法。 20.Proxy里也有NAME这个必要属性,用于直接传入到super()这个方法里面,这个方法的第二个参数暂时定为new ArrayColletion(),即第一个参数是proxyName 第二个参数是data 21.retrieveProxy这个方法里唯一的参数是Proxy实例的NAME值. 22.instance在哪都有 在ApplicationFacade这个类里 23 Proxy 这个类要实现的东西。 1要有NAME 2要有super 3要把data用get 转换成可读的变量名,要有具体的方法(可能有若干个)
要点总结 要把写代码的顺序归纳出来 :
vo proxy
ui
facade
然后去主文件上把ui和facade都添加上。
mediator
具体command
二级command
startupCommand
启动facade
| |
要点总结
默写1. 用时1小时40分
1.extends 和 implements
2.把能提高速度的地方都列举出来
3.项目里很多的public表示怀疑
4.来打错字。
5.变量的命名也是个大问题。
6.第一步swc 第二步包结构-->把基本的command都建好-->要把vo和proxy都建立好->开始建具体ui和mediator
7. metadata其实我不怎么懂!
要点总结 要把写代码的顺序归纳出来 :
vo proxy
ui
facade
然后去主文件上把ui和facade都添加上。
mediator
具体command
二级command
startupCommand
启动facade
默写2. 20:14 20:57 耗时43分钟
本次要求
1.不许打错字
2.打字的时候,要想下一步该做什么了
3.计时
5.写完一个回路头,一定要把他括起来。
4.写完之后把理论看一遍
再写一个demo就走