首頁 >web前端 >js教程 >rewrap-ajax.js插件介紹

rewrap-ajax.js插件介紹

一个新手
一个新手原創
2017-10-20 09:40:201299瀏覽

  很久沒有動手寫技術的文章,這個過程中間一直在寫日記,生活點滴的記錄替代了技術文章的編寫,可以看出以往的內心是激情或烈火,現在是. ..

  最近寫了一個JS插件,用圈內的話說叫造了個輪子,造的好與不好都不是自己說了算,關鍵還是大家用的好與不好。
  當然我自己也在使用,由於個人偏愛與喜好,所以未能藉簽其他Ajax框架的寫法,目前的版本都是以版本一進行往上整合的成果,所以你想要全面了解內部的結構,可以先從版本一開始看起。

  現在我們說說整體的設計結構,版本一是好友收集整理的方法,基礎的寫法已經成型,調用nativeAjax方放即可,方法內部有三個參數,第一個為ajax的屬性,第二個為成功的函數,第三個為錯誤的函數,具體如下:

nativeAjax(postOption,function(data){
    // 3.1、请求成功回调
    console.log(data);
},function(error){
    // 3.2、请求失败回调,返回HTTP状态码
    console.log(error);
});

  基於以上的設計模式,然後給他進行二次封裝,首先ajax的服務屬性固定不變,那麼我們可以把所有的ajax properties綁定到物件上即可,如果直接綁定在指定的物件上,其實我們只管給參數和拿參數,省了很多事情,這個過程簡單了不少,那麼彈性就不會很高。如果我們想自己在內部進行封裝,那麼就要求高靈活性和可復用屬性,所以我把屬性放在了function函數裡面,於是在內部使用this指針綁定ajax屬性進行調用,同時可以在內部進行插件的再次封裝,這是我所理解的這個版本的內部結構的設計模式。

  版本二rewrap-ajax調用的外部結構類似jq的JQ.fn屬性,是以鍊式結構的物件屬性方法來使用的,所以我們在3f1c4e4b6b16bbbd69b2ee476dc4f83a內部使用wrap.service(`ajax`, foo)即可,然後foo函數內部具有ajax的服務屬性,我們只要把ajax的屬性綁定到this指針上即可,ajax的get分別有URL,TYPE,SUCCESS, ERROR四個屬性,而這4個屬性都支援大小寫的格式。然後this.success,this.error是二個方法,分別是呼叫成功的資料請求和呼叫錯誤狀態的捕獲,而this.success和this.error都擁有一個參數。

wrap.service('ajax',function ajax() {
    // 支持大小写
    this.URL = "query.do"
    this.TYPE = "GET"
    this.SUCCESS = function(data) {
        var val = data;
        console.log(val)
    };
    this.ERROR = function(err) {
        console.log(err)
    };
});

  版本三rewrap-ajax保持版本二的外部結構和this寫法,this指針上多了二個功能,分別是props和methods方法,其中props方法內部return返回的結構為鍵值對的資料格式,具有多個state...狀態,例如:

1 return {
2     State_01: [{ class : ‘.main’, static: 'color', tip: 'message', content: 'container'}],
3     State_02: [{ class : ‘.main’, static: 'color'}],
4     State_03: [{ class : ‘.main’}]
5 }

#  其中每一個state狀態對應的值必須是使用陣列[]儲存,陣列內部必須是物件{},物件的屬性以常規格式要求,物件的屬性對應的值必須是一個dom節點能存取的Element元素(或node節點,class類,id,tag標籤等等)。

  然而methods方法的內部結構為常規的物件呼叫函數的格式,其中return傳回的物件鍵為API的方法,注意它不支援自訂寫法,傳回的物件的值為函數寫法,那麼函數方法接收一個參數(此參數為props管道內部的state狀態屬性),方法的內部使用this指標寫法,如下:this.el(param).add()

完整結構:

return {
    addClass: function (scope){
        this.el([scope.class,scope.static]).add()
    },
    removeClass: function (scope){
        this.el([scope.class,scope.tip]).remove()
    },
    pushHtml: function (scope){
        this.el([scope.static,scope.class]).push()
    },
    hasClass: function (scope){
        this.el(scope.define.content).has()
    }
}

  其中this.el(param)方法內部的參數是透過props管道流出的狀態屬性值作為參數,參數接收的結果為字串,多個字符字串的結果可以使用陣列[]的形式儲存,那麼這些字串都有這個API方法。 this.el()後面的add方法為目前的字串呼叫的add方法,然而add綁定的方法是API方法,例如addClass就是rewrap-ajax內部的API方法,所以你在外部呼叫你自訂的add方法去實作addClass方法,注意在this.methods內部自訂的add方法是不需要參數,但外部管道呼叫add是否需要參數取決於addClass方法(addClass為rewrap-ajax內部的API方法)。所以之後會公開API方法。

  外部this呼叫的方式,透過作用域$scope的形式獲得props屬性和methods方法,外部呼叫如下:

this.ERROR = function( $scope, err ) {
    $scope.$props.$el($scope.$props.$scope.define.static).add('error_message')
    $scope.$props.$el($scope.$props.$scope.define.static).push('调用出错 error')
    $scope.$props.$el($scope.$props.$scope.define.tip).remove('show')
    console.log(err)
}

以上是rewrap-ajax.js插件介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn