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

Clouda API使用手冊之Touch Publish Subscribe

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

Touch

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

touch.config

語法: touch.config(config)

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

參數(shù)描述:

  • config為一個(gè)對象

    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時(shí)間長度 
    5.     swipe: true,                //swipe事件開關(guān) 
    6.     swipeTime: 300,             //觸發(fā)swipe事件的最大時(shí)長 
    7.     swipeMinDistance: 18,       //swipe移動(dòng)最小距離 
    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: 事件的類型, 可接受多個(gè)事件以空格分開,支持原生事件的透傳, 支持的一些事件類型有:

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

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

  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. }); 

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

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

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

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

    • type //事件的名稱

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

    • scale //縮放比例

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

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

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

    • distance //swipe類兩點(diǎn)之間的位移

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

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

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

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

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

touch.live

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

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

touch.off

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

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

參數(shù)描述:

  • element:元素對象或選擇器

  • types:事件的類型

  • callback:時(shí)間處理函數(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的唯一名稱,在一個(gè)App內(nèi)全局唯一,該參數(shù)與sumeru.publish(modelName, publishName,function(callback))中的publishName名稱需要保持一致。

    • function(Collection){}

      Subscribe成功獲得數(shù)據(jù)時(shí),被調(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ù)的方法,其運(yùn)行在Server上。

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

    • modelName

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

    • pubName

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

    • function(callback)

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

    • options

      可在此添加以下六種事件

      • beforeInsert

        在實(shí)際插入數(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í)際插入數(shù)據(jù)到數(shù)據(jù)庫后的事件

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

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

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

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

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

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

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

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

        1. afterDelete : function(serverCollection, structData){ 

    實(shí)例:

    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)

    實(shí)例:

    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()傳入。

    實(shí)例:

    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

      每頁顯示的個(gè)數(shù)

    • skip

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

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

  • publishPlain

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

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

    實(shí)例:

    如果需要發(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)限中心的身份驗(yàn)證的Publish。

  • securePublish

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

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

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

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

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

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

    實(shí)現(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下添加一個(gè)如何獲取第三方數(shù)據(jù)的配置文件

    • config[pubname]

      • pubname

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

      • uniqueColumn

        uniqueColumn為三方數(shù)據(jù)唯一標(biāo)識(shí),類型為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ù),用來指定抓取時(shí)間間隔,單位為ms

      • buffer

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

      • type

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

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

      實(shí)例如下:

      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)識(shí) 
      10.         uniqueColumn : "name"
      11.  
      12.         //{Function} fetchUrl的參數(shù)就是訂閱時(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ù),用來指定抓取時(shí)間間隔,單位為ms 
      26.         fetchInterval : 60 * 1000, 
      27.  
      28.         //{Boolean} buffer為可選參數(shù),值為true時(shí)表示獲取原始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ā)生變化時(shí),如何使用Clouda達(dá)到三方數(shù)據(jù)同步的效果,具體實(shí)現(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í)際數(shù)據(jù)。

        實(shí)例如下:

        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ù),參數(shù)會(huì)按照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

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

        • onDeleteonInsertonUpdate

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

        實(shí)例如下:

        1. function runnable(){ 
        2.  
        3.     var config = {}; 
        4.  
        5.     config['pubext'] = { 
        6.         //arg1, arg2, arg3是subscribe時(shí)輸入的參數(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實(shí)例。

責(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本地存儲(chǔ)

2010-06-09 17:01:26

Cacti使用手冊
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 国产欧美在线 | 国产精品国产精品国产专区不片 | 亚洲国产成人精品一区二区 | 麻豆久久久久久 | 精品国产乱码久久久久久丨区2区 | 91精品国产91久久久久久吃药 | 欧美日韩一区二区三区四区五区 | 国产精品久久久久久久久大全 | 日韩激情免费 | 国产日韩欧美一区二区 | 国产成人精品免高潮在线观看 | 精品国产乱码久久久久久牛牛 | 欧美中文字幕一区二区三区亚洲 | 成人福利网站 | 欧美日韩视频在线 | 成人特区| 97caoporn国产免费人人 | av在线免费观看网站 | 国产日韩欧美一区二区 | 人人干人人爽 | 一区二区三区回区在观看免费视频 | 亚洲综合久久精品 | 涩涩导航| 国产精品毛片一区二区三区 | 国产精品久久精品 | 亚洲狠狠爱一区二区三区 | h在线免费观看 | 夜夜爽99久久国产综合精品女不卡 | 一区二区三区在线免费 | 一级a性色生活片久久毛片波多野 | 亚洲精品成人 | 九九久久精品视频 | 欧美在线观看一区 | 国产精品视频网址 | 影音av| 手机在线观看av | 在线a视频 | 美女视频h | 男插女下体视频 | 久久99视频这里只有精品 | 国产91在线视频 |