Clouda第一App“留言大厅”之创建hall.js

移动开发 Android
Clouda是简单,可依赖的实时Javascript框架。对一个想开发移动webapp的开发者来说,可以使用clouda开发框架,实现一个功能和体验与native app齐平的轻应用。

app/controller/下创建hall.js

  • hall.js

    1. sumeru.router.add( 
    2.     { 
    3.         pattern: '/hall'
    4.         action : 'App.hall' 
    5.     } 
    6. ); 

    我们在上一篇文档中已经看到过router,sumeru.router.add()作用是添加一个URL(其路径部分)与Controller的映射关系,关于router在下一篇文档中会做专门说明。

    1. App.hall = sumeru.controller.create(function(env, session){ 
    2.     var getMsgs = function(){        
    3.         session.messages = env.subscribe('pub-message'function(msgCollection){ 
    4.             //manipulate synced collection and bind it to serveral view blocks. 
    5.             session.bind('message-hall', { 
    6.                 data    :   msgCollection.find() 
    7.             }); 
    8.         }); 
    9.     };       
    10.     //onload is respond for handle all data subscription 
    11.     env.onload = function(){             
    12.         return [getMsgs];             
    13.     }; 

    大家可以看到在这里多了一个env.onload(),这是Controller的第一个时态,Controller中需要使用的数据都在这个时态中加载,我们先在这里添加上面的代码,关于env.onload()方法会在下一篇文档中做专门介绍。

    1. //sceneRender is respond for handle view render and transition 
    2.    env.onrender = function(doRender){ 
    3.        doRender('hall', ['push''left']); 
    4.    }; 

    在上一篇文档中我们已经见过env.onrender(),这是Controller的第二个时态,负责对View的渲染,关于该时态在后续会做专门说明。

    1. //onready is respond for event binding and data manipulate 
    2.   env.onready = function(){            
    3.       Library.touch.on('.messageSubmit''touchstart', submitMessage); 
    4.       Library.touch.on('.clearHistory''touchstart', clearHistory); 
    5.   }; 

    我们看到这里多了一个env.onready(),这是Controller的第三个时态,在View渲染完成后,事件绑定、DOM操作等业务逻辑都在该时态中完成。

    为了方便开发者更快的开发移动端的应用,Clouda中内置了手势事件库,关于手势事件库在API手册Touch部分会做详细的说明,在这里使用了手指轻触事件touch如果您是在PC浏览器中运行应用需要开启浏览器的Emulate touch events功能。

    在上面的代码中可以看到,我们使用了submitMessage()和clearHistory()两个还没有定义的方法,下面我们来实现它们。

    1. var submitMessage = function(){ 
    2.       var input = document.getElementById('messageInput'), 
    3.           inputVal = input.value.trim();       
    4.       if (inputVal == '') { 
    5.          return false;  
    6.       }; 
    7.       session.messages.add({ 
    8.          content : inputVal 
    9.       }); 
    10.       session.messages.save(); 
    11.       input.value = '';           
    12.   }; 

    在submitMessage()中我们使用了session.message.add()session.message.save().add()用于在collection中新增一个Model。.save()是用于将collection的修改保存到Server,在通常情况下,调用.save()方法会自动触发对应视图block的更新。

    从这里可以看出,Clouda设计的核心是面向数据的,当数据发生改变时Clouda会自动更新与该数据有关联的视图block,我们称之为"随动反馈",这是Clouda的一个重要特性。

    1.     var clearHistory = function(){ 
    2.         session.messages.destroy(); 
    3.         session.messages.save(); 
    4.     }        
    5. }); 

    同.add()的使用方法类似,.destroy()作用是将collection中的数据全部清空,数据清空后同样我们调用.save()根据数据的变化重新渲染与该数据关联视图block。

责任编辑:张叶青
相关推荐

2013-10-31 15:44:13

CloudaApp

2013-10-31 15:16:13

CloudaApp

2013-10-31 15:29:47

CloudaApp

2013-10-31 15:27:25

CloudaApp

2013-10-31 15:40:44

CloudaApp

2013-10-31 15:47:29

CloudaApp

2013-10-31 11:04:03

Cloudapackage.js

2013-10-31 15:12:57

CloudaAPI

2013-10-30 22:10:28

Clouda程序

2013-10-30 22:41:23

Clouda环境

2013-10-31 10:57:10

CloudaManifest

2013-10-31 09:51:10

CLouda结构

2013-10-31 14:55:22

2013-10-31 13:47:23

CloudaAPI

2013-10-31 14:30:44

CloudaAPI

2013-12-09 17:27:19

CloudaNode.js

2013-10-31 13:37:07

CloudaAPI手册

2013-10-31 10:59:41

Clouda使用

2013-10-30 22:50:30

Clouda结构

2013-10-31 22:53:58

Clouda程序
点赞
收藏

51CTO技术栈公众号