Flash—“动作”间的通信
当我们使用redirect_to()来传输控制给其它“动作”时,浏览器生成一个单独的请求
来要求那个“动作”。那个请求将通过我们应用程序的一个“控制器”对象的新实例内被处
理—在原先“动作”内设置的实例变量在被重定向“动作”内的处理代码中将不再有效。但
是有时候我们需要在这两个实例之间通信。我们可以使用叫flash 的功能做到这一点。
flash 是个临时的值暂存器。它被组织成类似于一个哈希表,并用来存储“会话”数据,
所以你可以存储与key 关联的值,并在稍后再重新取回它们。它有一个特别的属性。缺省地,
在一个请求处理期间被存储到flash 内的值在随后马上到达的请求处理中依然有效。一旦第
二个请求被处理完,这些值会被从flash 中移除。[如果你阅读flash 功能文档,你将会看到,
它谈到值只在下一个“动作”中有效。这不是很严格的:flash 在下一个请求处理结束后被
清除,而不是基于“动作”之间的。]
或许flash 最常用的用法是将一个“动作”的错误和信息字符串传递给下一个“动作”。
目的是让第一个“动作”通知一些条件,创建描述那个条件的消息,然后重定向到一个单独
的“动作”。通过在flash 中存储信息,第二个“动作”也能够访问文本消息并在“视图”
中使用它。
class BlogController
def display
@article = Article.find(params[:id])
end
def add_comment
@article = Article.find(params[:id])
comment = Comment.new(params[:comment])
@article.comments << comment
if @article.save
flash[:note] = "Thank you for your valuable comment"
else
flash[:note] = "We threw your worthless comment away"
end
redirect_to :action => 'display'
end
这个例子中,add_comment()方法以key 键:note 存储两个不同消息中的一个在flash 中。
它重定向到display()“动作”。display()“动作”似乎并不使用这个消息。继续看,我们
必须深入来查看app/views/blog 目录内的display.rhtml 中的代码。
<html>
<head>
<title>My Blog</title>
<%= stylesheet_link_tag("blog") %>
</head>
<body>
<div id="main">
<% if @flash[:note] -%>
<div id="notice"><%= @flash[:note] %></div>
<% end -%>
: : :
: : :
</div>
</body>
</html>
“层”代码中的flash 同它在“控制器”中一样好理解。在这个例子中,如果flash 包
含一个:note key 键,则我们的“层”会生成适当的<div>。
有时候也可方便地把flash 使用于传递当前“动作”内的消息到一个“模板”中。例如,
我们的display()方法可能在没有一个横向块时输出一个,以引起更多的注意。它不需要将
消息传递给下一个“动作”—它只用于当前的请求。要做到这些,它可以使用flash.now,
它更新flash 但不添加“会话”数据。
class BlogController
def display
unless flash[:note]
flash.now[:note] = "Welcome to my blog"
end
@article = Article.find(params[:id])
end
end
在flash.now 创建一个暂态的flash 条目时,flash.keep 做相反的事情,它让当的条目
逗留在其它请求循环之间。
class SillyController
def one
flash[:note] = "Hello"
flash[:error] = "Boom!"
redirect_to :action => "two"
end
def two
flash.keep(:note)
flash[:warning] = "Mewl"
redirect_to :action => "three"
end
def three
# At this point,
# flash[:note] => "Hello"
# flash[:warning] => "Mewl"
# and flash[:error] is unset
render
end
end
如果你没有传递给flash.keep 参数,所有flash 内容被保留。Flash 可以存储很多文本
信息—你可以使用它们在“动作”之间传递所有种类信息。明显地对于较长的信息你应该想
到使用“会话”(或许与你的数据库结合)来存储数据,但如果你想把参数从一个请求传递给
下一个请求,flash 还是很重要。
因为flash 数据被存储在“会话”内,所有的规则都适用于它。特别地,每个对象必须
被序列化,并且如果你存储“模型”,你需要在你的“控制器”中声明一个“模型”。
分享到:
相关推荐
Flash动作游戏源码是开发基于Adobe Flash平台的交互式游戏时使用的原始代码,通常包含在.FLA文件中。FLA文件是Flash Authoring Environment(创作环境)的项目文件,它是制作动画、游戏和其他互动内容的基础。这个...
《Flash MX 动作脚本字典》是一本专门针对ActionScript的学习资源,采用CHM(Compiled Help Manual)格式,这种格式通常是微软帮助文档的通用格式,方便用户离线查阅。ActionScript是Adobe Flash平台上用于创建交互...
- 如文件中的"game",可能是一个Flash游戏,利用XMLSocket与VB后台进行实时数据交互,如玩家动作同步、游戏状态更新等。 总结起来,FLASH通过XMLSocket与VB后台通信是一种常见的技术手段,尤其适用于实时交互的...
`fscommand`函数是Flash中的一个特殊函数,用于与播放器进行通信,实现如全屏等功能。 ##### 4. `on(release){if(substring(_root._url,8,1)=="/"){fscommand("quit");}else{getURL("javascript:window.close()");}...
ActionScript是Flash中的核心编程语言,它允许开发者为Flash作品添加交互性、响应用户输入或者与其他数据源进行通信。在“带有小动作的作品”中,这些“动作”可能是由ActionScript编写的小程序,比如按钮点击响应、...
【Flash动作脚本语言详解】 Flash动作脚本语言(ActionScript)是Adobe Flash开发平台的核心组成部分,用于控制和交互电影剪辑、按钮、图形和其他动态元素。它是一种面向对象的编程语言,允许开发者创建复杂的交互...
Flash动作脚本是Adobe Flash Professional中的核心技术之一,它允许开发者为动画、交互式内容和应用程序添加动态功能。这个“Flash动作脚本从入门开始”教程是专为初学者设计的,旨在帮助那些有一定Flash基础的用户...
《Flash MX 2004 动作脚本参考指南》是针对Adobe Flash MX 2004平台中ActionScript编程的重要参考资料。ActionScript是一种基于ECMAScript的脚本语言,广泛应用于创建交互式富媒体内容,如网页动画、游戏和应用程序...
在Flash中可以通过`getURL()`函数调用Director中的Lingo命令,从而实现两者间的通信。具体做法如下: ```actionscript on(rollover) { getURL('lingo:cursor280'); } on(rollout) { getURL('lingo:cursor0'); } ...
### Flash MX 动作脚本参考指南核心知识点详解 #### 一、引言 《Flash MX 动作脚本参考指南》是一本详尽的技术文档,主要针对使用Adobe Flash MX软件进行动画创作与互动开发的专业人士及爱好者。本书旨在帮助读者...
- **Flash与JavaScript的集成**:学习使用`ExternalInterface` API或其他方法实现Flash内容与JavaScript之间的通信,允许在两种技术间传递数据和触发事件。 - **响应式设计**:如何根据用户设备和浏览器特性决定是否...
《Flash MX 2004 动作脚本字典概述》是一份深入解析Flash MX 2004中动作脚本的参考资料。Flash MX 2004是Adobe公司开发的一款经典版本的动画和交互设计工具,它极大地扩展了Web内容的动态性和交互性。在这款软件中,...
2. **上传机制**:Flash上传文件通常使用ActionScript(Flash的编程语言)编写,通过与服务器进行通信来实现文件的上传。用户选择文件后,Flash组件会分块或者整体发送到服务器,同时报告当前上传进度。 3. **带...
《Flash MX 2004动作脚本字典》是一本专门为Flash MX 2004用户准备的全面性参考资料,旨在帮助用户深入理解和掌握在Flash中应用ActionScript进行交互式设计与开发的关键技巧。ActionScript是Adobe Flash平台的核心...
3. **事件处理和交互性**:由于Flash Player播放器与Flash媒体文件可以实现交互,因此需要理解QT的信号和槽机制,这是QT中实现对象间通信的重要方式。当用户与Flash内容交互时,如点击按钮或触发某些动作,这些事件...
在这个小仓鼠效果中,JavaScript可能被用来作为Flash与网页其他部分通信的桥梁,例如,通过JavaScript控制Flash对象的显示、隐藏,或者接收来自Flash的事件通知,从而实现更复杂的页面联动。 实现这个效果的过程...
此外,Flash支持逐帧动画、形状补间和动作补间等多种动画类型,提供了一种高效创建动态视觉效果的方式。 2. ActionScript编程:ActionScript是Flash平台的脚本语言,用于控制和操作Flash对象,实现交互性和功能。...