首页 > 网站 > WEB开发 > 正文

21.5.创建Cairngorm视图、事件和模型

2024-04-27 13:52:28
字体:
来源:转载
供稿:网友
21.5.1.问题
我需要创建一个Cairngorm视图,并把它绑定到模型的属性上。
21.5.2.解决方案
创建一个实现了Cairngorm ModelLocator接口的模型类,往这个类里添加需要的数据属性,并把这些属性标记为可绑定的。然后把视图中所有数据驱动的控件绑定到这个模型的对应属性上。
21.5.3.讨论
Cairngorm控制器的视图不需要扩展任何类,它可以是任意类型。视图最重要的特征是它们绑定到模型类的属性上,并且当需要从服务器加载数据或者需要向服务器发送数据时,它们会触发CairngormEvent。

接下来的几部分将创建一个Cairngorm应用程序,我们将按照书写的顺序而不是开发的顺序一步步显示它们。这个程序的视图包括:一个mx:Button,点击它会生成一个加载recipes的事件,该事件会调用服务并加载recipes;一个DataGrid,用来显示从服务器收到的结果:
+展开
-XML
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxmlwidth="400height="300">
<mx:Script>
<![CDATA[
import
oreilly.cookbook.cairngorm.events.RecipeEvent;
import oreilly.cookbook.cairngorm.model.Model;
/*在下面的方法中,会发送RecipeEvent,该事件使得FrontController接收来自服务器的数据,我们不需要知道服务器究竟是从数据库中读取数据还是从其他地方读取。更多关于FrontController的信息,请查看21.8小节。而现在,我们关心的是视图和视图发送的通知应用程序获取数据的事件。另外需要注意的是,CairngormEvent类有一个dispatch方法,用来把它们发送到Cairngorm EventDispatcher上。这跟通常情况下处理事件的方式不同,需要确保事件被FrontController处理而不是被其他的截获。*/
privatefunction loadRecipes():void{
var evt:RecipeEvent = newRecipeEvent(RecipeEvent.GET_RECIPE);
evt.recipeKeywords= recipeKeywords.text.split("," );
//Note that the CairngormEvent class dispatches itself
//This notifies the Cairngorm EventBroadcaster that the event
//is being dispatched. This is used to ensure that the Cairngorm architecture
//handles the event rather than the flash.events.EventDispatcher
evt.dispatch();
}

]]>
</mx:Script>
<mx:VBox>
<mx:TextInput id="recipeKeywords"/>
<mx:Button label="Load Recipesclick="loadRecipes()"/>
<!--Cairngorm程序视图的另一个重要特征是它绑定到模型上。下面的例子中recipeArray是服务器返回的数据数组,它保存在模型中,视图就绑定到它上面。这样不需要把视图暴露给服务相关的逻辑,就能在数据加载到应用程序时更新视图。-->
<mx:DataGrid dataProvider="{Model.getInstance().recipeArray}">
<mx:columns>
<mx:DataGridColumn dataField="title"/>
<mx:DataGridColumn dataField="difficulty"/>
<mx:DataGridColumn dataField="pictureURL">
<mx:itemRenderer>
<mx:Component>
<mx:Image source="{data}"/>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
<mx:DataGridColumn dataField="preparationTime"/>
<mx:DataGridColumn dataField="ingredients"/>
<mx:DataGridColumn dataField="instructions"/>
</mx:columns>
</mx:DataGrid>
</mx:VBox>
</mx:Canvas>
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表