编译coffeescript时添加了不需要的js代码

时间:2014-08-28 11:55:21

标签: javascript coffeescript

我是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[]&amp; displayValues[]但为什么要创建_results[]数组?它是否会妨碍浏览器的效率?是否有任何方法删除这种不道德的代码?可能是,通过编辑我的咖啡脚本。

编辑:工作条件

但是当我把警报代码作为

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

此代码有效,我可以检索所需的数据。

1 个答案:

答案 0 :(得分:2)

除了your code wouldn't work anyway之外,由于coffeescripts隐式函数返回值而生成_results,而loops are only expressions也生成数组。文档声明:

  

有时,函数以循环结束,这些循环仅用于副作用。小心你不会意外返回   在这些情况下理解的结果,通过添加一个   有意义的回报值 - 如true - 或null,位于底部   你的功能。

所以你期望的javascript可以通过编写

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

(“尾随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) ->
    …