2012-12-12 57 views
5

我首次爲響應式網頁/ Web應用程序(移動設備)創建商業API。第一次創建JavaScript API

我是新的,可悲的是,單獨工作以及新的JavaScript(長而複雜的故事)。

我只是想知道,如果從行業有人可以提供一個「讓」調用的格式如下他們的專業意見:

var getSample = function(params) { 
    //Returns Object 
    return $.ajax({ 
     url: URL + 'downloadQuadrat.php', 
     type: 'GET', 
     data: { 'projectID': params.pid, 'quadratID': params.qid }, 
     dataType: dataType 
    }); 
} 

函數調用:

var printList = function(lid,options,get) { 
    var list = $("ul#"+lid); 
    var promise = get(options); 

    promise.promise().then(
     function(response) { 
      var items = response; 
      list.empty(); 

      $.each(items, function(item,details) { 
       var ul = $('<ul/>'); 
       ul.attr('id', lid+'_'+details.ID); 
       var li = $('<li/>') 
       .text(details.ID) 
       .appendTo(list); 
       ul.appendTo(list); 

       $.each(details,function(key,value) { 
        var li = $('<li/>') 
        .text(key+': '+value) 
        .appendTo(ul); 
       }); 
      }); 
     } 
    ); 
} 

任何輸入或指導將非常感激。

+9

這種問題可能更適合[http://codereview.stackexchange.com/](http://codereview.stackexchange.com/) –

+0

謝謝,我一定會檢查出來 –

+1

除了事實codereview可能是合適的,你的代碼確實有問題。 getSample使用異步Ajax調用,所以不能從函數返回值。您將需要引入回調函數作爲參數或返回承諾對象。 – David

回答

3

我不是一個專業從行業,本身,但有,我認爲會改善你的代碼幾件事情:根據一般慣例是

  • 格式。如果沒有正確的縮進,很難看到你的代碼在做什麼。
  • 只需使用$("#"+lid)而不是$("ul#"+lid)。開頭的ul不會添加任何消歧,因爲id屬性必須是唯一的,並且它只是使解析需要更長的時間。
  • 溝渠本地存儲在這種情況下。它在所有瀏覽器上都不被支持,並且據我所知,在這裏你不需要它。直接使用從響應返回的數據。

這是我如何會改變你的代碼:

var printList = function(lid, options, get) { 
    var promise = get(options); 
    var list = $("#" + lid); 

    promise.success(function(response) { 
     var data = response; 
     list.empty(); 
     $.each(data, function(item, details) { 
      var ul = $('<ul/>').attr('id', lid + '_' + details.ID); 
      var li = $('<li/>').text(details.ID).appendTo(list); 
      ul.appendTo(list); 
      $.each(details, function(key, value) { 
       var li = $('<li/>').text(key + ': ' + value).appendTo(ul); 
      }); 
     }); 
    }); 
} 

編輯:你的代碼編輯的版本看起來好像沒什麼問題,除了輕微的ul#事情。

+0

謝謝。我會進行建議的更改。 .promise()。then()和.success()在功能上有明顯區別嗎?或者要麼伎倆? –

+0

有區別,但在這種情況下,我認爲它們在功能上是相同的。 –

3

一些更多的建議,讓您的API一點點更加專業:

1 - 命名空間

使用一個命名空間,讓您的代碼在自己的空間巧妙地組合,它不會與其他功能發生衝突頁面上的定義。像這樣開始:

window.MyNamespace = {}; 
MyNamespace.get = function(qid, pid) { 
    //things 
}; 
MyNamespace.anotherFunction = function() { 
    //other stuff 
} 

如果你的代碼開始變大,你可以把所有的東西都封裝在一個閉包中。你也可以將它全部定義爲類,然後實例化一次,使代碼更簡潔,並允許存儲實例變量並調用this.anotherFunction()。如果您願意,我也可以提供這些例子。

2 - API方法簽名

我更願意看到的另一件事是明確的函數的參數,而不是功能的get(PARAMS)樣式代碼。明確參數使您的代碼更易於閱讀和理解,並且阻止特別的黑客攻擊,這在編寫API時尤其重要。這僅僅是因爲你可以不意味着你應該這樣做。

3 - 配置

嘗試之類的ID和URL進入變量入手,使你的代碼更容易一點重用和使用。

通常,Javascript開發人員在查看您的API文檔之前着眼於查看您的代碼,所以您可以做的任何事情使API函數名稱和參數名稱更具表現力,並且自我記錄會幫助他們。

+0

1 - 在編輯OP之前,我實際上已經有名稱空間。但是,目前我已經棄用了他們的使用,而我制定了一個堅實的結構以允許含糊不清。如上所述,這些特定的get方法被模糊地調用。我已經想通過硬鍵入參數會使得難以在UI調用中使用委託,如printList() 3 - 您將在$ .ajax url屬性中看到一個「URL」變量,這是在作用域之外設置的配置變量。 我會仔細研究硬輸入參數的想法,並嘗試找到一個優雅的方式來重新引入命名空間:) –

相關問題