成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Clouda API使用手冊之Touch Publish Subscribe

移動開發(fā)
Clouda是簡單,可依賴的實時Javascript框架。對一個想開發(fā)移動webapp的開發(fā)者來說,可以使用clouda開發(fā)框架,實現(xiàn)一個功能和體驗與native app齊平的輕應(yīng)用。

Touch

在開發(fā)移動端的應(yīng)用中會使用到很多的手勢操作,例如一指拖動、兩指旋轉(zhuǎn)等等,為了方便開放者快速集成這些手勢,在Clouda中內(nèi)置了事件和手勢庫Library.touch,下面將詳細(xì)的介紹如何使用Library.touch。

touch.config

語法: touch.config(config)

對手勢事件庫進(jìn)行全局配置。

參數(shù)描述:

  • config為一個對象

    1.     tap: true,                  //tap類事件開關(guān), 默認(rèn)為true 
    2.     doubleTap: true,            //doubleTap事件開關(guān), 默認(rèn)為true 
    3.     hold: true,                 //hold事件開關(guān), 默認(rèn)為true 
    4.     holdTime: 650,              //hold時間長度 
    5.     swipe: true,                //swipe事件開關(guān) 
    6.     swipeTime: 300,             //觸發(fā)swipe事件的最大時長 
    7.     swipeMinDistance: 18,       //swipe移動最小距離 
    8.     swipeFactor: 5,             //加速因子, 值越大變化速率越快 
    9.     drag: true,                 //drag事件開關(guān) 
    10.     pinch: true,                //pinch類事件開關(guān) 

touch.on

語法:touch.on(element, types, options, callback)

綁定指定元素的事件。

參數(shù)描述:

  • element: 元素對象或選擇器。

  • types: 事件的類型, 可接受多個事件以空格分開,支持原生事件的透傳, 支持的一些事件類型有:

pinchstart 雙指縮放動作開始
pinchend 雙指縮放動作結(jié)束
pinch 雙指縮放事件
pinchin 雙指向里縮小
pinchout 雙指向外放大
rotateleft 向左旋轉(zhuǎn)
rotateright 向右旋轉(zhuǎn)
rotate 旋轉(zhuǎn)事件
swipestart 單指滑動動作開始
swiping 單指滑動事件
swipeend 單指滑動動作結(jié)束
swipeleft 單指向左滑動
swiperight 單指向右滑動事件
swipeup 單指向上滑動
swipedown 單指向下滑動
swipe 單指滑動事件
drag 單指向左右拖動
hold 單指按住不放事件
tap 單指點擊
doubletap 單指雙擊

例如旋轉(zhuǎn)實例如下:

  1. var angle = 30; 
  2. touch.on('#rotation .target''touchstart'function(ev){ 
  3. ev.startRotate(); 
  4. ev.originEvent.preventDefault(); 
  5. ev.originEvent.stopPropagation(); 
  6. }); 
  7. touch.on('#rotation .target''rotate', {interval: 10}, function(ev){ 
  8. var totalAngle = angle + ev.rotation; 
  9. if(ev.fingerStatus === 'end'){ 
  10.   angle = angle + ev.rotation; 
  11.  
  12. this.style.webkitTransform = 'rotate(' + totalAngle + 'deg)'
  13. }); 

更多使用實例請查看http://code.baidu.com/

  • options(可選): 目前可配置的參數(shù)為:

    1.    //采樣頻率 
    2.    interval: 10,//性能參數(shù),值越小,實時性越好, 但性能可能略差, 值越大, 性能越好。遇到性能問題時,可以將值設(shè)大調(diào)優(yōu),建議值設(shè)置為10。 
    3.    //swipe加速度因子(swipe事件專用) 
    4.    swipeFactor: 5 //(int: 1-10)值越大,速率更快。 
  • callback: 事件處理函數(shù), 該函數(shù)接受的參數(shù)為一個gesture event object, 可訪問的屬性有:

    • originEvent //觸發(fā)某事件的原生對象

    • type //事件的名稱

    • rotation //旋轉(zhuǎn)角度

    • scale //縮放比例

    • direction //操作的方向?qū)傩?/p>

    • fingersCount //操作的手勢數(shù)量

    • position //相關(guān)位置信息, 不同的操作產(chǎn)生不同的位置信息。

    • distance //swipe類兩點之間的位移

    • distanceX //swipe類事件x方向的位移

    • distanceY //swipe類事件y方向的位移

    • angle //swipe類事件觸發(fā)時偏移角度

    • factor //swipe事件加速度因子

    • startRotate //啟動單指旋轉(zhuǎn)方法,在某個元素的touchstart觸發(fā)時調(diào)用。

touch.live

語法:touch.live(selector, types, options, callback)

使用方法基本上與on相同,live的第一個參數(shù)只接受css3選擇器。通過live()方法附加的事件處理程序適用于匹配選擇器的當(dāng)前及未來的元素(比如由腳本創(chuàng)建的新元素)

touch.off

語法:touch.off(element,types,callback)

解除某元素上的事件綁定。

參數(shù)描述:

  • element:元素對象或選擇器

  • types:事件的類型

  • callback:時間處理函數(shù)

#p#

Publish/Subscribe

subscribe

訂閱被發(fā)布的數(shù)據(jù),與pubilsh配合使用

  • 不帶參數(shù) env.subscribe(publishName, function(collection){});

    1. env.subscribe("pub-allStudents"function(studentCollection){ 
    2.  
    3. }); 
    • pulishName

      所定義的Publish的唯一名稱,在一個App內(nèi)全局唯一,該參數(shù)與sumeru.publish(modelName, publishName,function(callback))中的publishName名稱需要保持一致。

    • function(Collection){}

      Subscribe成功獲得數(shù)據(jù)時,被調(diào)用的響應(yīng)方法。

  • 帶參數(shù) env.subscribe(publishName,arg1,arg2, ... , function(collection){});

    1. env.subscribe("pub-StudentsWithGender""male"function(msgCollection){ 
    2.  
    3. }); 
  • subscribeByPage

    分頁訂閱數(shù)據(jù)

    • 不帶參數(shù) env.subscribeByPage(publishName, options, function(collection){});

      1. var pageOption{ 
      2.     pagesize : 1,  
      3.     page : 2, 
      4.     uniqueField : 'time' 
      5. }; 
      6.  
      7. env.subscribeByPage("pub-allStudents", pageOption, function(studentCollection){ 
      8.  
      9. }); 
      • options

        分頁設(shè)置

        • pageSize

          每頁數(shù)據(jù)的數(shù)量

        • page

          頁碼

        • uniqueField

          排序的唯一字段名

    • 帶參數(shù) env.subscribeByPage(publishName, options, arg1,arg2, ... , function(collection){});

      1. env.subscribeByPage("pub-StudentsWithGender", pageOption, "male"function(msgCollection){ 
      2.  
      3. }); 
  • prioritySubscribe

在斷線重新連接的情況下,使用prioritySubscribe方法訂閱數(shù)據(jù)優(yōu)先被調(diào)用,使用方式與subscribe相同。

#p#

publish

發(fā)布數(shù)據(jù)的方法,其運行在Server上。

  • 不帶參數(shù) sumeru.publish(modelName,pubName,function(callback){},options)

    • modelName

      被發(fā)布數(shù)據(jù)所屬的Model名稱

    • pubName

      所定義的Publish的唯一名稱,在一個App內(nèi)全局唯一,該參數(shù)與Controller中subscribe()成對使用。

    • function(callback)

      描述數(shù)據(jù)發(fā)布規(guī)則的自定義函數(shù),在這里定義被發(fā)布數(shù)據(jù)所需要符合的條件。

    • options

      可在此添加以下六種事件

      • beforeInsert

        在實際插入數(shù)據(jù)到數(shù)據(jù)庫前的事件

        1. beforeInsert : function(serverCollection, structData, userinfo, callback){ 
        2.     callback(structData); 
        • structData

          需要插入到數(shù)據(jù)庫的數(shù)據(jù),我們可以對該數(shù)據(jù)進(jìn)行操作,然后將數(shù)據(jù)插入到數(shù)據(jù)庫中,如果對數(shù)據(jù)沒有修改,則將原數(shù)據(jù)添加到數(shù)據(jù)庫中。

        • callback

          before系列的事件中如果不添加 callback(),將阻止數(shù)據(jù)對數(shù)據(jù)庫的影響。

        • callback(structData)

          如果需要對原數(shù)據(jù)進(jìn)行修改,可以傳入?yún)?shù)structData

      • afterInsert

        在實際插入數(shù)據(jù)到數(shù)據(jù)庫后的事件

        1. afterInsert : function(serverCollection, structData){ 
      • beforeUpdate

        在實際更新數(shù)據(jù)庫數(shù)據(jù)前的事件

        1. beforeUpdate : function(serverCollection, structData, userinfo, callback){ 
        2.     callback(); 
      • afterUpdate

        在實際更新數(shù)據(jù)庫數(shù)據(jù)后的事件

        1. afterUpdate : function(serverCollection, structData){ 
      • beforeDelete

        在實際刪除數(shù)據(jù)庫數(shù)據(jù)前的事件

        1. beforeDelete : function(serverCollection, structData, userinfo, callback){ 
        2.     callback(); 
      • afterDelete

        在實際刪除數(shù)據(jù)庫數(shù)據(jù)后的事件

        1. afterDelete : function(serverCollection, structData){ 

    實例:

    1. module.exports = function(sumeru){ 
    2.     sumeru.publish('student''pub-allStudents'function(callback){ 
    3.         var collection = this
    4.  
    5.         collection.find({}, function(err, items){ 
    6.             callback(items); 
    7.         }); 
    8.     }); 
  • 帶參數(shù) sumeru.publish(modelName,pubName,function(arg1, ..., callback){},options)

    實例:

    1. module.exports = function(sumeru){ 
    2.     sumeru.publish('student''pub-allStudents'function(gender,callback){ 
    3.         var collection = this
    4.  
    5.         collection.find({'gender':gender}, function(err, items){ 
    6.             callback(items); 
    7.         }); 
    8.     }); 
  • publishByPage

    分頁發(fā)布數(shù)據(jù)

    sumeru.publishByPage(modelName,pubName,function(arg1,arg2,...,pageOptions, callback){},options)
    • options

      分頁設(shè)置,有Controller中subscribeByPage()傳入。

    實例:

    1. sumeru.publishByPage('student''pub-allStudents'function(gender,options,callback){ 
    2.     var collection = this
    3.     collection.find({ sort    :{'time':-1}, 
    4.                       limit   : options.pagesize, 
    5.                       skip    : (options.page-1)*options.pagesize, 
    6.                       "gender": gender 
    7.                      }, function(err, items){ 
    8.         callback(items); 
    9.     }); 
    10. }); 
    • sort

      排序

    • limit

      每頁顯示的個數(shù)

    • skip

      當(dāng)前頁與起始頁間隔的個數(shù)

    詳細(xì)的使用情況請查看《Example》文檔中的實例。

  • publishPlain

    用于發(fā)布簡單對象,而非Collection。

    sumeru.publishPlain(modelName,pubName,function(callback){},options)

    實例:

    如果需要發(fā)布Collection中數(shù)據(jù)的總數(shù)量,可使用下面方法:

    1. fw.publishPlain('student''pub-allStudents'function(callback){ 
    2.     var collection = this
    3.  
    4.     collection.count({},function(err, count){ 
    5.         callback(count); 
    6.     }); 
    7. }); 

    下面的三種方法是包含權(quán)限中心的身份驗證的Publish。

  • securePublish

    在身份驗證成功的情況下發(fā)布數(shù)據(jù)

    sumeru.publish(modelName,pubName,function(userinfo, callback){},options)
  • securePublishByPage

    在身份驗證成功的情況下分頁發(fā)布數(shù)據(jù)

    sumeru.securePublishByPage(modelName,pubName,function(pageOptions,userinfo, callback){},options)
  • securePublishPlain

    在身份驗證成功的情況下發(fā)布簡單對象

    sumeru.securePublishPlain(modelName,pubName,function(userinfo, callback){},options)
  • external

    實現(xiàn)了三方數(shù)據(jù)同步的方法,用來滿足從三方網(wǎng)站/三方接口獲取和同步數(shù)據(jù)的需求。

    • extfind(pubName,callback)

      在publish文件中發(fā)布第三方數(shù)據(jù)

      1. fw.publish('news','pubnews',function(callback){ 
      2.     var collection = this
      3.  
      4.     collection.extfind('pubnews',callback); 
      5. }); 

    使用該方法需要在publish下添加一個如何獲取第三方數(shù)據(jù)的配置文件

    • config[pubname]

      • pubname

        與publish中collection.extfind(pubname,callback)方法pubname一致,全局唯一

      • uniqueColumn

        uniqueColumn為三方數(shù)據(jù)唯一標(biāo)識,類型為String

        uniqueColumn : "name",
      • fetchUrl: function((/** arg1, arg2, arg3 */)){}

        指定抓取的URL。arg1,arg2為傳遞的參數(shù)

        1. fetchUrl : function(/** arg1, arg2, arg3 */){ 
        2.     return 'http://some.host.com'
      • resolve : function(originData){}

        resolve方法作用是將抓取回來的原始數(shù)據(jù)(originData)轉(zhuǎn)化成為符合Model定義的數(shù)據(jù)(resolved)

        1. resolve : function(originData){ 
        2.     var j = JSON.parse(originData); 
        3.     var resolved = j; 
        4.     return resolved; 
      • fetchInterval

        fetchInterval為可選參數(shù),用來指定抓取時間間隔,單位為ms

      • buffer

        buffer為可選參數(shù),值為true時表示獲取原始Buffer,否則獲取原始數(shù)據(jù)字符串

      • type

        聲明此模塊為歸屬為'external'

        1. return { 
        2.     type : 'external'
        3.     config : config 

      實例如下:

      1. /** 
      2.  * 獲取三方數(shù)據(jù)信息,由開發(fā)者自定義 
      3.  */ 
      4. function runnable(){ 
      5.     //{Object} config是所有三方publish配置的容器 
      6.     var config = {}; 
      7.  
      8.     config['pubext'] = { 
      9.         //{String} uniqueColumn為三方數(shù)據(jù)唯一標(biāo)識 
      10.         uniqueColumn : "name"
      11.  
      12.         //{Function} fetchUrl的參數(shù)就是訂閱時發(fā)起的參數(shù),返回值為pubext所抓取的url地址 
      13.         fetchUrl : function(/** arg1, arg2, arg3 */){ 
      14.             return 'http://some.host.com'
      15.         }, 
      16.  
      17.         //{Function} resolve方法作用是將抓取回來的原始數(shù)據(jù)(originData)轉(zhuǎn)化成為符合Model定義的數(shù)據(jù)(resolved) 
      18.         resolve : function(originData){ 
      19.             var j = JSON.parse(originData); 
      20.             var resolved = j; 
      21.  
      22.             return resolved; 
      23.         }, 
      24.  
      25.         //{Number} fetchInterval為可選參數(shù),用來指定抓取時間間隔,單位為ms 
      26.         fetchInterval : 60 * 1000, 
      27.  
      28.         //{Boolean} buffer為可選參數(shù),值為true時表示獲取原始Buffer,否則獲取原始數(shù)據(jù)字符串 
      29.         buffer : false 
      30.     } 
      31.  
      32.     //最后需要聲明此模塊為歸屬為'external' 
      33.     return { 
      34.         type : 'external'
      35.         config : config 
      36.     } 
      37.  
      38.  
      39. module.exports = runnable; 
    • 指定三方增/刪/改接口以及數(shù)據(jù)

      當(dāng)數(shù)據(jù)發(fā)生變化時,如何使用Clouda達(dá)到三方數(shù)據(jù)同步的效果,具體實現(xiàn)方法如下:

      • 較為緊湊的聲明方式

        • postUrl

          postUrl方法用來指定三方post接口的地址信息, 參數(shù)type為增量類型,增量類型為'insert','update','delete'三者之一;

        • prepare

          prepare方法用來將增量數(shù)據(jù)轉(zhuǎn)化成為符合三方POST接口要求的post數(shù)據(jù),參數(shù)type同為增量類型,參數(shù)data為增量的實際數(shù)據(jù)。

        實例如下:

        1. /** 
        2.  *  三方數(shù)據(jù)POST請求信息,由開發(fā)者自定義 
        3.  */ 
        4. function runnable(){ 
        5.  
        6.     var config = {} 
        7.  
        8.     config['pubext'] = { 
        9.  
        10.         /** 
        11.          * 聲明三方POST接口地址 
        12.          * {String} type為'delete', 'insert', 'update'其中之一 
        13.          * 如果subscribe時帶參數(shù),參數(shù)會按照subscribe順序接在postUrl的參數(shù)中 
        14.          */ 
        15.         postUrl : function(type /** arg1, arg2, arg3... */){ 
        16.             var options = { 
        17.                 host : 'some.host.com'
        18.                 path : '/' + type , 
        19.                 headers: { 
        20.                     //在此自定義header內(nèi)容,clouda默認(rèn)的 'Content-Type': 'application/x-www-form-urlencoded' 
        21.                     'Content-Type': ... 
        22.                 } 
        23.             } 
        24.             return options; 
        25.         }, 
        26.  
        27.         /** 
        28.          * prepare方法將增量數(shù)據(jù)轉(zhuǎn)化為符合三方要求的post數(shù)據(jù)。 
        29.          * {String} type為增量操作,值為'delete', 'insert', 'update'其一; 
        30.          * {Object} data為增量數(shù)據(jù),如:{ name : 'user1', age : 26 }。 
        31.          */ 
        32.         prepare : function(type, data){ 
        33.             var prepareData = {};  //prepareData為三方post所需的data 
        34.             if(type === "delete"){ 
        35.                 prepareData.name = data.name; 
        36.             }else if(type === "insert"){ 
        37.                 prepareData.name = data.name; 
        38.                 prepareData.age = data.age; 
        39.             }else
        40.                 prepareData.name = data.name; 
        41.                 prepareData.age = data.age; 
        42.             } 
        43.  
        44.             return prepareData; 
        45.         } 
        46.     } 
        47.  
        48.     return { 
        49.         type : 'external'
        50.         config : config 
        51.     } 
        52.  
        53.  
        54. module.exports = runnable; 
      • 較為工整的聲明方式

        • deleteUrlinsertUrlupdateUrl

          三個方法作用等同于postUrl,返回不同操作下三方接口url信息

        • onDeleteonInsertonUpdate

          三個方法作用等同于prepare方法, 返回經(jīng)過處理,傳給三方接口的post數(shù)據(jù)

        實例如下:

        1. function runnable(){ 
        2.  
        3.     var config = {}; 
        4.  
        5.     config['pubext'] = { 
        6.         //arg1, arg2, arg3是subscribe時輸入的參數(shù) 
        7.         deleteUrl : function(/** arg1, arg2, arg3... */){ 
        8.             return { 
        9.                 host : 'some.host.com'
        10.                 path : '/delete' 
        11.             } 
        12.         }, 
        13.  
        14.         insertUrl : function(/** arg1, arg2, arg3... */){ 
        15.             return { 
        16.                 host : 'some.host.com'
        17.                 path : '/insert' 
        18.             } 
        19.         }, 
        20.  
        21.         updateUrl : function(/** arg1, arg2, arg3... */){ 
        22.             return { 
        23.                 host : 'some.host.com'
        24.                 path : '/update' 
        25.             } 
        26.         }, 
        27.  
        28.         onInsert : function(data){ 
        29.             var prepareData = {}; 
        30.             prepareData.name = data.name; 
        31.             prepareData.age = data.age; 
        32.             return prepareData; 
        33.         }, 
        34.  
        35.         onUpdate : function(data){ 
        36.             var prepareData = {}; 
        37.             prepareData.name = data.name; 
        38.             prepareData.age = data.age; 
        39.             return prepareData; 
        40.         }, 
        41.  
        42.         onDelete : function(data){ 
        43.             var prepareData = {} 
        44.             prepareData.name = data.name; 
        45.             return prepareData; 
        46.         } 
        47.     } 
        48.  
        49.     return { 
        50.         type : 'external'
        51.         config : config 
        52.     } 
        53.  
        54.  
        55. module.exports = runnable; 
    • sumeru.external.get

      向第三方發(fā)送get請求

      1. var url = "http://some.host.com"
      2. var getCallback = function(data){ 
      3.     console.log(data); 
      4. sumeru.external.get(url, getCallback); 
    • sumeru.external.post

      向第三方發(fā)送post請求

      1. var options = { 
      2.     host : "some.host.com"
      3.     path : "/insert" 
      4.  
      5. var postData = { 
      6.     name : sumeru.utils.randomStr(8), 
      7.     age : parseInt( 100 * Math.random()) 
      8.  
      9. var postCallback = function(data){ 
      10.     console.log(data); 
      11.  
      12. sumeru.external.post(options, postData, postCallback); 

    具體使用請查看《Example》文檔中的SpiderNews實例。

責(zé)任編輯:張葉青
相關(guān)推薦

2013-10-31 14:55:22

2013-10-31 13:47:23

CloudaAPI

2013-10-31 13:37:07

CloudaAPI手冊

2013-10-31 15:12:57

CloudaAPI

2010-05-20 19:12:37

2009-10-26 11:11:33

linux Emacs

2010-05-19 10:40:46

Subversion

2009-12-02 18:03:00

PHP cURL

2011-08-09 13:22:31

iPhoneSqlite數(shù)據(jù)庫

2010-08-31 08:59:06

marginHTML

2010-05-26 14:01:47

SVN安裝使用手冊

2010-05-21 12:37:49

SVN使用教程

2010-05-19 10:57:34

Subversion配

2010-05-26 12:59:48

SVN簡易使用手冊

2010-05-26 13:51:40

SVN安裝使用手冊

2010-05-27 13:35:43

SVN簡易使用手冊

2010-06-07 12:38:37

Cacti使用手冊

2010-05-26 13:17:55

SVN簡易使用手冊

2015-08-06 11:10:46

開源IaaS軟件ZStack本地存儲

2010-06-09 17:01:26

Cacti使用手冊
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 精品视频在线播放 | 日韩成人精品一区二区三区 | 久久久人成影片一区二区三区 | 成人av播放 | 青青草久久 | 北条麻妃国产九九九精品小说 | 国产精品免费看 | 成年人黄色一级毛片 | 亚洲九色 | 久久亚洲国产精品 | 激情在线视频网站 | 午夜寂寞福利视频 | 久久久精品一区 | 99热在这里只有精品 | 亚洲aⅴ| 免费看色| 女人一区 | 99久久精品国产一区二区三区 | 99综合 | 成人免费视频 | 国产在线视频一区 | 精品一区二区三区入口 | 亚洲欧美一区二区三区在线 | 亚洲精品一区二区久 | 国产一区 | 成人一区二区三区在线观看 | 日本久久久久久久久 | 久久精品国产久精国产 | 在线91 | 在线国产一区 | 黄色在线观看网址 | 成人国产精品久久久 | 视频一区中文字幕 | 国产精品亚洲成在人线 | 亚洲国产片 | 国产精品无码专区在线观看 | 欧美精品tv | 日韩中文欧美 | 日韩在线不卡 | 久久亚洲国产 | 日韩国产精品一区二区三区 |