2016-01-06 9 views
0

Я пытаюсь получить глобализацию работы с видженом spinner в 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) 

Я хожу в й e jquery-ui.js в строке 12778, и я вижу, что он обращается к Globalize.format. Поэтому я заглядываю в свой файл Globalize.js и нет функции, называемой format ... что дает?

+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 с другими. SO проверить, какие JS вызывают проблему . Если вы нашли js, добавьте jQuery.noConflict();, чтобы решить вашу проблему.

+0

В любом случае нет функции для формата. Таким образом, вызов этой функции будет бомбить независимо от того, что –