2016-01-06 144 views
0

我試圖讓全球化與jQuery中的微調控件一起工作。我的代碼包括被排序爲這樣:jQuery調用未定義的Globalize.format函數

<script type='text/javascript' src='/js/jquery-2.0.3.min.js'></script> 
<script type='text/javascript' src='/js/jquery-migrate-1.2.1.min.js'></script> 
<script type='text/javascript' src='/css/jquery/jquery-ui.js'></script> 

<script type='text/javascript' src="/resources/js/cldr.js"></script> 
<script type='text/javascript' src="/resources/js/cldr/event.js"></script> 
<script type='text/javascript' src="/resources/js/cldr/supplemental.js></script> 

<script type='text/javascript' src="/resources/js/globalize.js"></script> 

<script type='text/javascript' src="/resources/js/globalize/message.js"></script> 
<script type='text/javascript' src="/resources/js/globalize/number.js"></script> 
<script type='text/javascript' src="/resources/js/globalize/plural.js"></script> 
<script type='text/javascript' src="/resources/js/globalize/date.js"></script> 

<script type='text/javascript' src="/resources/js/globalize/currency.js"></script> 
<script type='text/javascript' src='js/index.js'></script> 

我嘗試加載CLDR東西,如他們的文件說之後,我經過每一個旋轉的容器,並根據輸入的名義申請的微調控件:

$.when(
    $.get("/resources/js/cldr/main/en/numbers.json"), 
    $.get("/resources/js/cldr/main/en/currencies.json"), 
    $.get("/resources/js/cldr/supplemental/likelySubtags.json"), 
    $.get("/resources/js/cldr/supplemental/numberingSystems.json"), 
    $.get("/resources/js/cldr/supplemental/ordinals.json"), 
    $.get("/resources/js/cldr/supplemental/plurals.json") 
).then(function() { 

    // Normalize $.get results, we only need the JSON, not the request statuses. 
    return [].slice.apply(arguments, [ 0 ]).map(function(result) { 
     return result[ 0 ]; 
    }); 

}).then(Globalize.load).then(function() { 

    /** 
     Add a spinner to each spinner class 
    */ 
    $(".spinner").each(function() { 

     var $S = $(this).children("input"); 
     var name = $(this).attr("name"); 

     switch (name) { 

      case "one-count": 

       $S.spinner({ 
        min: 0, 
        step: 1, 
        start: 0 
       }); 

      break; 

      case "currency-1k-count": 

       $S.spinner({ 
        min: 0, 
        step: 1000, 
        start: 0, 
        numberFormat: "C" 
       }); 

      break; 
     } 
    }); 
}); 

當我包括微調控件的屬性部分的NUMBERFORMAT和去點擊頁面上的微調,它拋出一個錯誤說:

Uncaught TypeError: Globalize.format is not a function jquery-ui.js(line:12778) 

我去TH e jquery-ui.js文件在12778行,我發現它正在調用Globalize.format。所以我進入我的Globalize.js文件,並沒有函數稱爲格式...什麼給?

+0

而且Globalize.parseFloat是不確定的爲好。爲什麼jQuery調用這些函數,如果它們不存在? –

回答

2

來自版本1.x的全球化庫,沒有用於格式化所有模塊中的數字的格式化函數,但是它是否具有特定貨幣模塊currencyFormatter中的每個模塊的方法。我看的解決方案是:

var locale = 'es-CO'; 
 

 
$.when(
 
    $.getJSON(window.Misc.urlFull("cldr/supplemental/likelySubtags.json")), 
 
    $.getJSON(window.Misc.urlFull("cldr/main/"+ locale +"/numbers.json")), 
 
    $.getJSON(window.Misc.urlFull("cldr/supplemental/numberingSystems.json")), 
 
    $.getJSON(window.Misc.urlFull("cldr/supplemental/plurals.json")), 
 
    $.getJSON(window.Misc.urlFull("cldr/supplemental/ordinals.json")), 
 
    $.getJSON(window.Misc.urlFull("cldr/main/"+ locale +"/currencies.json")), 
 
    $.getJSON(window.Misc.urlFull("cldr/supplemental/currencyData.json")) 
 
).then(function() { 
 

 
    // Normalize $.get results, we only need the JSON, not the request statuses. 
 
    return [].slice.apply(arguments, [ 0 ]).map(function(result) { 
 
    return result[ 0 ]; 
 
    }); 
 

 
}).then(Globalize.load).then(function() { 
 

 
    Globalize.locale(locale); 
 

 
    $.widget("ui.sspinner", $.ui.spinner, { 
 
    _parse: function(val) { 
 
     if (typeof val === "string" && val !== "") { 
 
     val = window.Globalize && this.options.numberFormat ? 
 
      Globalize.numberParser({ maximumFractionDigits : 10 })(val) : +val; 
 
     } 
 
     return val === "" || isNaN(val) ? null : val; 
 
    }, 
 

 
    _format: function(value) { 
 
     if (value === "") { 
 
     return ""; 
 
     } 
 

 
     if(window.Globalize && this.options.numberFormat){ 
 

 
     this.options.currency || (this.options.currency = 'COP'); 
 

 
     switch(this.options.numberFormat) { 
 
      case 'C': return Globalize(this.options.culture).formatCurrency(value, this.options.currency); break; 
 
      default: return Globalize(this.options.culture).formatNumber(value); break; 
 
     } 
 
     } 
 
    } 
 
    }); 
 
    
 
    
 
    var config = { 
 
    '.spinner-currency' : { 
 
     step: 5, 
 
     start: 1000, 
 
     min: 0, 
 
     numberFormat: "C", 
 
     culture: 'es-CO', 
 
     currency: 'COP' 
 
    }, 
 
    '.spinner-quantity': { 
 
     step: 1, 
 
     start: 1, 
 
     min: 0 
 
    } 
 
    }; 
 

 
    for (var selector in config) { 
 

 
    $(selector).each(function(index, el) { 
 
     var $el = $(el); 
 
     var spinner = {}; 
 

 
     if(!$el.sspinner("instance")){ 
 
     spinner = $el.sspinner(config[selector]); 
 

 
     if($el.val() == '') 
 
      spinner.sspinner("value", 0); 
 
     } 
 
    }); 
 
    } 
 
});

0

你得到了錯誤,因爲你有其他jQuery conflict。所以檢查哪個JS導致的問題。如果您發現js添加jQuery.noConflict();可解決您的問題。

+0

無論哪種方式都沒有格式的功能。所以對這個功能的調用無論如何都會發生爆炸 –