一个openlaszlo使用flash的共享对象实现保存客户端信息的例子

本文介绍了一个使用LocalCache进行数据缓存的应用实例,通过在浏览器中保存和读取选择状态来展示其基本用法。LocalCache允许应用程序维护状态或提供用户界面创建键值对存储,实现简单的本地文件存储功能。

原文在这里:
http://forum.openlaszlo.org/showthread.php?p=25458#post25458

部分摘录如下:

-----------------------------------------------
localcache.lzx
-----------------------------------------------

< library >

<!---
*  LocalCache
*
*  A dictionary  for  localy cached data.
*  It allows an application to maintain state or to enable the app
*  to provide a user  with  an interface to create a list of keys
*  and save and load data  for  each key,
*  essentially creating a temporary local file store
*  of xml documents or datasets
*
*  We have APP_NAME and CACHE_VER constants
*  that we use to version the keysets locally
*  so that anytime that an app needs to make a change
*  to the local datastructure it can bump up the version
*  to avoid datastructure version problems between instances  in  the wild
*  the appname is so that different apps from the same domain
*  and which use the same code, don ' t step on each other ' s data
*
*  expected use  for  maintaining application state
*   //  oninit
*   if  (gLocalCache.testWriteable())
*   if (gLocalCache.checkLocalKey( " mysavedstate " )) {
* mydata=gLocalCache.getLocalData("mydataname");
* // create LzDataElement with mydata
* }
  else   {
* // create key and initialize with data
* gLocalCache.saveLocalKey("mydataname");
* gLocalCache.saveLocalData("mydataname", ds_state.serialize());
* }

*  }  else   {
* // deal with the case where local data has been disabled
* }

*
-->

<!--  CONSTANTS  -->
< script >
var  APP_NAME  = " app " ;
var  CACHE_VER  =   " 1 " ;
</ script >

<!--  CLASSES  -->
< script >
<! [CDATA[

// --------------------------------------------------------------------------------
//
 LocalCache Constructor
//
--------------------------------------------------------------------------------
function  LocalCache()  {
// Debug.write("created");
}

LocalCache.prototype 
=   new  Object();
LocalCache.prototype.constructor 
=  LocalCache;
Object.registerClass(
" LocalCache " , LocalCache);

// --------------------------------------------------------------------------------
//
 testWriteable
//
--------------------------------------------------------------------------------
LocalCache.prototype.testWriteable  =   function () {
var retval = true;
var tstWriteObj = SharedObject.getLocal("tst");
if(!tstWriteObj.flush(10000)) {
// local cache is disabled
retval = false;
}

delete tstWriteObj;
return retval;
}


// --------------------------------------------------------------------------------
//
 saveLocalKeyDataPair
//
--------------------------------------------------------------------------------
LocalCache.prototype.saveLocalKeyDataPair  =   function (key, data) {
if (this.testWriteable()){
if (this.checkLocalKey(key)){
this.saveLocalData(key,data);
return "Saved the data, overwriting anything that was there";
}
 else {
this.saveLocalKey(key);
this.saveLocalData(key,data);
return "Created the key and saved the data.";
}

}
 else {
return "The user has disabled the local shared object";
}

}


// --------------------------------------------------------------------------------
//
 getLocalData
//
--------------------------------------------------------------------------------
LocalCache.prototype.getLocalData  =   function (key) {
var localObj = SharedObject.getLocal( APP_NAME+CACHE_VER);
return localObj.data[key];
}


// --------------------------------------------------------------------------------
//
 getLocalKeys
//
--------------------------------------------------------------------------------
LocalCache.prototype.getLocalKeys  =   function () {
var localObj = SharedObject.getLocal( APP_NAME+CACHE_VER);
return localObj.data.keys;
}


// --------------------------------------------------------------------------------
//
 saveLocalKey
//
--------------------------------------------------------------------------------
LocalCache.prototype.saveLocalKey  =   function (key) {
var localObj = SharedObject.getLocal( APP_NAME+CACHE_VER);

if(localObj.data.keys == null{
localObj.data.keys 
= new Array(key);
}
 else {
ifthis.checkLocalKey(key)){
// then it already exists
}
 else {
localObj.data.keys.push(key);
localObj.data[key] 
= "";
}

}

localObj.flush();
delete localObj;
}


// --------------------------------------------------------------------------------
//
 checkLocalKey
//
--------------------------------------------------------------------------------
LocalCache.prototype.checkLocalKey  =   function (key) {
var localObj = SharedObject.getLocal( APP_NAME+CACHE_VER);
var len = localObj.data.keys.length;
var retval = false;
for(i=0; i<len; i++){
if(localObj.data.keys[i] == key){
// it exists
retval = true;
}

}

return retval;
}


// --------------------------------------------------------------------------------
//
 deleteLocalKey
//
--------------------------------------------------------------------------------
LocalCache.prototype.deleteLocalKey  =   function (key) {
var localObj = SharedObject.getLocal( APP_NAME+CACHE_VER);
var len = localObj.data.keys.length;

// delete the data if it exists first
this.deleteLocalData(key);

// then find and remove the key from the list
for(i=0; i<len; i++){
if(localObj.data.keys[i] == key){
localObj.data.keys.splice(i,
1);
}

}

localObj.flush();
delete localObj;
}


// --------------------------------------------------------------------------------
//
 saveLocalData
//
--------------------------------------------------------------------------------
LocalCache.prototype.saveLocalData  =   function (key, data) {
var localObj = SharedObject.getLocal( APP_NAME+CACHE_VER);
localObj.data[key] 
= data;
localObj.flush();
delete localObj;
}


// --------------------------------------------------------------------------------
//
 deleteLocalData
//
--------------------------------------------------------------------------------
LocalCache.prototype.deleteLocalData  =   function (key) {
var localObj = SharedObject.getLocal( APP_NAME+CACHE_VER);
delete localObj.data[key];
localObj.flush();
delete localObj;
}

]]
>
</ script >

<!--  INITIALIZATION  -->
< script >
var  gLocalCache  =   new  LocalCache();
</ script >
</ library >

---------------------------------------------------------------
saveselectionsample.lzx
--------------------------------------------------------------

 

< canvas >
< debug y = " 700 "  width = " 750 "  height = " 175 " />
< include href = " localcache.lzx " />

< dataset name = " dsselection1 " >
< items >
< item value = " item1 " > item one </ item >
< item value = " item2 " > item two </ item >
< item value = " item3 " > item three </ item >
< item value = " item4 " > item four </ item >
</ items >
</ dataset >

< dataset name = " dsselection2 " >
< items >
< item value = " item1 " > item one </ item >
</ items >
</ dataset >

< view name = " interface " >
< simplelayout axis = " y " />
< view name = " buttons "   >
< wrappinglayout axis = " y " />

< button text = " saveSelections "   >
< method event = " onclick " >
<! [CDATA[
var  dp  =  dsselection1.getPointer();
//  we should maintain a variable for the first check that fails and use that
//
 instead of calling checkLocalKey each time or the user will get the dialog box
//
 each time if they've disabled it and want to keep it disabled.
if (gLocalCache.checkLocalKey( " dsselections " )) {
gLocalCache.saveLocalKeyDataPair(
"dsselections", dp.serialize());
}
  else   {
// at this point local shared objects must be disabled or the key would exist
//
 from the initial call of loadSelections
//
 nevertheless we might want to reinitialize it here
//
 in case the user has changed their settings
//
 durring the session from disabled to enabled
//
 gLocalCache.saveLocalKeyDataPair("dsselections", dp.serialize());
}

]]
>
</ method >
</ button >

< button text = " loadSelections "   >
< method event = " onclick " >
<! [CDATA[
var  dp  =  dsselection2.getPointer();
if (gLocalCache.checkLocalKey( " dsselections " )) {
// Debug.write("localdata exits");
var selCacheNode = LzDataNode.stringToLzData(gLocalCache.getLocalData ("dsselections" ))
dsselection2.setChildNodes([selCacheNode.getFirstChild()]);
// Debug.write("loaded and serialized:"+ dp.serialize());
}
  else   {
// Debug.write("--in-else-lso-needs-initializing--" );
gLocalCache.saveLocalKeyDataPair("dsselections", dp.serialize());
}

]]
>
</ method >
</ button >
</ view >

< combobox id = " gogocombo1 "  editable = " false " >
< textlistitem name = " textguy1 "
datapath
= " dsselection1:/items/item "
text
= " gogo "   />
</ combobox >

< combobox id = " gogocombo2 "  editable = " false " >
< textlistitem name = " textguy2 "
datapath
= " dsselection2:/items/item "
text
= " gogo gadget "   />
</ combobox >
</ view >
</ canvas >

 

该例子后面有评价认为,如果有多个用户同时使用一个browser,那么他们有可能共享相同的shareobject,除非在shareobject中区分用户,而且这个临时数据在某一个用户清空缓存的时候清掉所有的临时数据,所以还是局限性。

内容概要:本文设计了一种基于PLC的全自动洗衣机控制系统内容概要:本文设计了一种,采用三菱FX基于PLC的全自动洗衣机控制系统,采用3U-32MT型PLC作为三菱FX3U核心控制器,替代传统继-32MT电器控制方式,提升了型PLC作为系统的稳定性与自动化核心控制器,替代水平。系统具备传统继电器控制方式高/低水,实现洗衣机工作位选择、柔和过程的自动化控制/标准洗衣模式切换。系统具备高、暂停加衣、低水位选择、手动脱水及和柔和、标准两种蜂鸣提示等功能洗衣模式,支持,通过GX Works2软件编写梯形图程序,实现进洗衣过程中暂停添加水、洗涤、排水衣物,并增加了手动脱水功能和、脱水等工序蜂鸣器提示的自动循环控制功能,提升了使用的,并引入MCGS组便捷性与灵活性态软件实现人机交互界面监控。控制系统通过GX。硬件设计包括 Works2软件进行主电路、PLC接梯形图编程线与关键元,完成了启动、进水器件选型,软件、正反转洗涤部分完成I/O分配、排水、脱、逻辑流程规划水等工序的逻辑及各功能模块梯设计,并实现了大形图编程。循环与小循环的嵌; 适合人群:自动化套控制流程。此外、电气工程及相关,还利用MCGS组态软件构建专业本科学生,具备PL了人机交互C基础知识和梯界面,实现对洗衣机形图编程能力的运行状态的监控与操作。整体设计涵盖了初级工程技术人员。硬件选型、; 使用场景及目标:I/O分配、电路接线、程序逻辑设计及组①掌握PLC在态监控等多个方面家电自动化控制中的应用方法;②学习,体现了PLC在工业自动化控制中的高效全自动洗衣机控制系统的性与可靠性。;软硬件设计流程 适合人群:电气;③实践工程、自动化及相关MCGS组态软件与PLC的专业的本科生、初级通信与联调工程技术人员以及从事;④完成PLC控制系统开发毕业设计或工业的学习者;具备控制类项目开发参考一定PLC基础知识。; 阅读和梯形图建议:建议结合三菱编程能力的人员GX Works2仿真更为适宜。; 使用场景及目标:①应用于环境与MCGS组态平台进行程序高校毕业设计或调试与运行验证课程项目,帮助学生掌握PLC控制系统的设计,重点关注I/O分配逻辑、梯形图与实现方法;②为工业自动化领域互锁机制及循环控制结构的设计中类似家电控制系统的开发提供参考方案;③思路,深入理解PL通过实际案例理解C在实际工程项目PLC在电机中的应用全过程。控制、时间循环、互锁保护、手动干预等方面的应用逻辑。; 阅读建议:建议结合三菱GX Works2编程软件和MCGS组态软件同步实践,重点理解梯形图程序中各环节的时序逻辑与互锁机制,关注I/O分配与硬件接线的对应关系,并尝试在仿真环境中调试程序以加深对全自动洗衣机控制流程的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值