Cairngorm: Model Locator用来集中管理程序所需的变量。

首先在我们的项目的src文件夹下,建立model文件夹:

第二步建立ViewModelLocator.as类。此类必须实现IModelLocator接口。

ViewModelLocator.as的代码如下:

ViewModelLocator.as

package org.rianotes.CairngormSample.model
{
import com.adobe.cairngorm.model.IModelLocator;

import mx.collections.ArrayCollection;

[Bindable]
public class ViewModelLocator implements IModelLocator {

// Single Instance of Our ModelLocator
private static var instance:ViewModelLocator;
public function ViewModelLocator(enforcer:SingletonEnforcer) {
if (enforcer == null) {
throw new Error( "You Can Only Have One ViewModelLocator" );
}
}

// 回傳已存的變數
// Returns the Single Instance
public static function getInstance() : ViewModelLocator {
if (instance == null) {
instance = new ViewModelLocator( new SingletonEnforcer );
}
return instance;
}

//在下面定義你要的變數 - DEFINE YOUR VARIABLES HERE
public var contactbook:ArrayCollection = new ArrayCollection();

}
}

// Utility Class to Deny Access to Constructor
class SingletonEnforcer {}

其中构造函数与getInstance()这两个部分照着写,大致上不用修改。

它们是用来判断application中是否已经建立了ViewModelLocator,有的话读取,沒有的话初始一个。

在同一个application中只能有一个ModelLocator,所有的View都能从此读取数据。

而[Bindable]的特性,可以让任一个使用ModelLocator中的变量的地方自动更新。

下面的示例是一个通讯录,将使用者资料存在ModelLocator中
其中将示范,即使在不同的组件中对ModelLocator数据修改,其他的组件也会即时更新。

新增三个文件,两个是MXML 组件。

AddPersonForm.mxml - 用来输入用户名与用户Email地址的From

AddPersonForm.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml"
horizontalAlign="right">
<mx:Script>
<![CDATA[
import org.rianotes.CairngormSample.vo.User;
import mx.controls.Alert;
import org.rianotes.CairngormSample.model.ViewModelLocator;
private var modelOne:ViewModelLocator = ViewModelLocator.getInstance();

private function addPerson(e:MouseEvent):void{
if(tiUserID.text && tiEmail.text){
var usercontact:User = new User();
usercontact.UserID = tiUserID.text;
usercontact.Email = tiEmail.text;
modelOne.contactbook.addItem(usercontact);

tiUserID.text = "";
tiEmail.text = "";
}
else{
mx.controls.Alert.show("使用者ID與電子郵件不可為空!");
}
}
]]>
</mx:Script>

<mx:Form borderStyle="solid" width="100%" height="100%">
<mx:FormItem label="UserID :" width="100%">
<mx:TextInput id="tiUserID" width="100%"/>
</mx:FormItem>

<mx:FormItem label="Email: " width="100%">
<mx:TextInput id="tiEmail" width="100%"/>
</mx:FormItem>

</mx:Form>

<mx:Button label="输入" click="addPerson(event)" />
</mx:VBox>

ContactbookGrid.mxml -用来显示输入资料的DataGrid

ContactbookGrid.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:DataGrid xmlns:mx="http://www.adobe.com/2006/mxml"
dataProvider="{modelOne.contactbook}">

<mx:Script>
<![CDATA[
import org.rianotes.CairngormSample.model.ViewModelLocator;

private var modelOne:ViewModelLocator = ViewModelLocator.getInstance();
]]>
</mx:Script>

<mx:columns>
<mx:DataGridColumn headerText=" - UserID - " width="75" dataField="UserID" />
<mx:DataGridColumn headerText=" - Email - " dataField="Email"/>
</mx:columns>
</mx:DataGrid>

一个VO(value object)

User.as - 用来记录User contact info的资料的类。

User.as

package org.rianotes.CairngormSample.vo
{
public class User
{
public var UserID:String;
public var Email:String;

public function User()
{
}

}
}

而其中最重要的是:

import org.rianotes.CairngormSample.model.ViewModelLocator;
private var modelOne:ViewModelLocator = ViewModelLocator.getInstance();
这是每个组件对ModelLocator作初使化的动作,之后Component就能夠从ModelLocator读取已存在或被修改的变量了。

最後在MXML Application中将components加入

Main.mxml -项目的主文件

Main.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Application
xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute" xmlns:components="org.rianotes.CairngormSample.view.components.*">

<mx:Script>
<![CDATA[
import org.rianotes.CairngormSample.model.ViewModelLocator;

private var modelOne:ViewModelLocator = ViewModelLocator.getInstance();

]]>
</mx:Script>
<mx:HBox width="500" height="200">
<mx:VBox>
<mx:Label text="{'Number of Contacts: ' + modelOne.contactbook.length}" />
<components:ContactbookGrid width="100%" height="100%" />
</mx:VBox>
<components:AddPersonForm width="100%" height="100%" />
</mx:HBox>

</mx:Application>

转载于:https://www.cnblogs.com/yangxiao24/archive/2010/05/14/1735034.html

(转)Cairngorm初学者入门教程 第三节--从使用Model Locator开始学起Cairngorm相关推荐

  1. (转)Cairngorm初学者入门教程 第四节--通过 Model Locator 控制管理 Views

    Cairngorm: Views就是使用者最直观看到的显示,包含了button, panel- 等所组成的视图,它从Model Locator中取得数据,通过Cairngorm Events与用户产生 ...

  2. Cairngorm初学者入门教程 第六节--Cairngorm中Command利用Delegate与Service连接

    在上一节,我们利用FrontController 去映射 Event与Command 在这一节我们主要针对Command这部分动作做介紹.在RIA应用程序中,不可或缺的部份就是跟后台服务器连接进行数据 ...

  3. 【linux视频教程整套共25个视频】Linux初学者入门教程 .

    [linux视频教程整套共25个视频]Linux初学者入门教程 视频内容 1.Linux系统安装(一) 2.Linux系统安装(二) 3.Linux系统安装(三) 4.Linux系统安装(四) 5.远 ...

  4. 微信小程序云开发 初学者入门教程二

    微信小程序云开发 初学者入门教程二-前端操作数据库模块 如何操作数据库,作为一名前端,如果对数据的知识不够熟悉也没关系,从现在开始好好学习就行,数据库的操作内容差不多涉及增删改查四大模块,花一些业余的 ...

  5. jQuery 初学者入门教程

    jQuery 是什么,它能为我们做什么?如果你是一名 Web 开发人员,写过 JavaScript 程序,那么你很可能正在使用 jQuery,即使没有试用过,至少也听说过,事实上 jQuery 可以说 ...

  6. WordPress初学者入门教程-WordPress的网页

    原文  WordPress的网页 - wordpress中文 在我们开始深入研究WordPress的内部工作原理并建立我们的网站之前,我需要先谈谈网页,因为WordPress做事情的方式让很多人感到困 ...

  7. 素描初学者入门教程素描高手分享经…

    素描是什么东西就不说了,说了也没有用-- 画人物,我觉得必须从几何开始,可以跳过静物,石膏同理,因为可以把人脸分解和统一成基本的几何物体,好像结婚一样,可以先斩后奏的--我想新手们点字把它读完后,多多 ...

  8. WordPress初学者入门教程-插件

    本文源自:https://wpeyes.com/wordpress 在本节中,我们将更详细地重新访问插件. 我想解释一下插件是什么,你可以在哪里获得它们,以及如何安装它们.我还会带你了解一些重要的插件 ...

  9. WordPress初学者入门教程-什么是WordPress?

    原文   什么是Wordpress? - wordpress中文 WordPress是一个内容管理系统(CMS).这仅仅意味着它是一个软件,可以帮助你管理和组织你的内容到一个令人印象深刻和连贯的网站. ...

最新文章

  1. R语言设置或查询图形参数par函数
  2. python3 多进程库 multiprocessing 使用简介
  3. 【c_prime_plus】第十七章笔记
  4. java sql函数_Java调用Sql存储过程实例讲解
  5. 改善代码可测性的若干技巧
  6. lambda 两个list获取交集_《Java8 实战》笔记 - Lambda 表达式
  7. Leetcode 笔记 116 - Populating Next Right Pointers in Each Node
  8. STL源码剖析-vector
  9. 面试时,如何向HR解释自己频繁跳槽?
  10. mac上c++11的编译问题
  11. ajax 跨域 iis7,IIS中使用URL rewrite配置跨域调用
  12. wamp中mysql连接数据库_wamp链接到数据库
  13. 【IE知识】最系统、完整的标准工时学习资料;标准作业(SOP)详解;生产线布局规划
  14. nSMS-企业级短信中间件介绍
  15. STM32F4型号命名规则
  16. BSCI验厂考勤资料工资作假不一致解决方案
  17. 一文就懂HashMap原理!学不会你来砍我!
  18. 3D纸飞机MATLAB代码,使用纯CSS实现的迎着阳光飞行的3D纸飞机
  19. R语言ggplot2 |绘制高颜值森林图
  20. ATmega2560调试记录:驱动安装、程序无法下载、波特率异常

热门文章

  1. 【spring-session】 1.x与2.x 不兼容
  2. an tu tu html5 test,Design an Accuracy Test System for Resolver-To-Digital Converter Based on PXI
  3. java正则 环视_正则表达式之环视(java)
  4. mongodb 查多个不等于_高可用架构之商城的mongodb设计分析
  5. java 调用本地接口_JAVA通过本地接口调用C++
  6. win8.1 php mysql,win8.1(64位) apache2.4.3+php5.6.3+mysql5.6安装
  7. php投票系统报告,投票系统设计
  8. DGL教程【四】使用GNN进行链路预测
  9. 二十九、电子商务服务推荐项目基本描述
  10. linux下常见的网络相关命令