2014-08-28 36 views
0

我是新來的CoffeeScript和我有一個咖啡腳本代碼不需要js代碼在編譯CoffeeScript的

getProviderListDisplayValues:(domainId) ->  
    displayValues = [] 
    $.ajax 
     contentType: 'application/json', 
     url: "/Services/ListProviders?domainid=#{domainId}", 
     success: (data) ->   
      for oneResponse in data 
       displayValues.push oneResponse.name  
    displayValues 

其編譯爲

CounselorHome.prototype.getProviderListValues = function(domainId) { 
    var values; 
    values = []; 
    $.ajax({ 
    contentType: 'application/json', 
    url: "/Services/ListProviders?domainid=" + domainId, 
    success: function(data) { 
     var oneResponse, _i, _len, _results; 
     _results = []; 
     for (_i = 0, _len = data.length; _i < _len; _i++) { 
     oneResponse = data[_i]; 
     _results.push(values.push(oneResponse.id)); 
     } 
     return _results; 
    } 
    }); 
    return values; 
}; 

我只是想推值values[] & displayValues[]但是爲什麼創建了_results[]數組?它是否妨礙了瀏覽器的效率?有沒有辦法消除這種不明智的代碼?可能是,編輯我的咖啡腳本。

編輯:使用條件

但是,當我把一個報警代碼

$.ajax 
     contentType: 'application/json', 
     url: "/Services/ListProviders?domainid=#{domainId}", 
     success: (data) ->   
      for oneResponse in data 
       displayValues.push oneResponse.name  
alert displayValues 
displayValues 

此代碼的工作,我可以檢索所需的數據。

+0

_ajax_是_asynchronous_所以我認爲你試圖做一些事情,你希望這是行不通的。它看起來像咖啡注意到這一點,所以永遠不會以可引用的方式爲您提供'_results' – 2014-08-28 11:59:30

+0

是的,在重新使用值[]時,Google Chrome返回undefined,FireFox返回null。但我寫了代碼將所有數據推送到值[]。因此,這個問題。 – Jeetendra 2014-08-28 12:06:06

回答

2

除了那個your code wouldn't work anyway之外,_results由於coffeescripts隱式函數返回值而生成,並且loops are only expressions也生成數組。文檔狀態:

有時函數以僅用於其副作用的循環結束。注意你不會意外返回 在這些情況下的理解結果,通過添加 有意義的返回值 - 如true - 或null,到您的函數底部 。

所以,你希望可以通過寫

… 
    success: (data) -> 
     for oneResponse in data 
      displayValues.push oneResponse.name 
     return 
… 

創建的JavaScript( 「尾隨returnreturn undefined正在優化掉。」 - 從1.0.1版本);
Is there any way to not return something using CoffeeScript?

見然而,你真正想要的是這樣的:

getProviderListDisplayValues:(domainId) -> 
    $.ajax 
     contentType: 'application/json', 
     url: "/Services/ListProviders?domainid=#{domainId}" 
    .then (data) ->   
     for oneResponse in data 
      oneResponse.name 

… 

getProviderListDisplayValues(…).then (displayValues) -> 
    … 
+0

由於OP的代碼實際上並沒有銷燬對'displayValues'的引用(直到它被轉換),這意味着在_success_之後,它應該像預期的那樣工作,而不是_won't工作,被填充。這只是沒有讓腳本的其餘部分知道成功功能已經完成...和咖啡的轉換。 – 2014-08-28 12:11:48

+1

@PaulS .:是的,這使得'displayValues'數組無法使用 - 我非常大膽,因爲我期待OP在返回數組後立即使用它。這個錯誤太常見了: -/ – Bergi 2014-08-28 12:17:52

+0

如果是這樣,如何填充值[],因爲我需要返回一個數組? – Jeetendra 2014-08-28 12:32:02