2015-09-10 4 views
-2

Я написал функцию, в которой я читал и показывал в Excel, как лист распространения (используется библиотека spreadJS) на вкладке. Хотя он прекрасно работает на Ubuntu Chromium, когда я запустить его на Firefox или Chrome, я получаю сообщение об ошибке:Неопределенная ошибка переменной в Javascript

TypeError: spread is undefined 
var metricsSheet = spread.getActiveSheet(); 

Это функция:

requirejs.config({ 
     shim: { 
      "spreadjs": { 
       deps: ["jquery"], 
      } 
     }, 
     paths: { 
      "jquery": "http://code.jquery.com/jquery-1.9.1.min", 
      "spreadjs": "http://cdn.wijmo.com/spreadjs/jquery.wijmo.wijspread.3.20143.15.min", 
     }, 
    }); 
    require(["jquery", "spreadjs"], function() { 
      $("#ss").wijspread(); 
      spread = $("#ss").wijspread("spread"); 
    }); 


    function initExcel(){ 
     $(document).ready(function() { 

      $.ajax({ 
       type: "GET", 
       url: "Code/python/csv/outputMetrics.csv", 
       dataType: "text", 
       success: function(data){ // on succes loop through the lines of CSV 

       // and pass data into spread sheet. 
        var allLines = data.split('\n'); 
        var metricsSheet = spread.getActiveSheet(); 
        // set column width of columns 
        metricsSheet.setColumnWidth (1,400); 
        metricsSheet.setColumnWidth (2,300); 
        for (var i=0; i<allLines.length; i++) { 
         var data = allLines[i].split(';'); 
         metricsSheet.setValue(i+1, 1, data[0]); 
         metricsSheet.setValue(i+1, 2, data[1]); 
        } 
        spread.isPaintSuspended(false); 
       }, 
       error: function(){ 
        alert("Error reading CSV or passing data to Excel"); 
       } 
      }); 
     }); 
    } 

Что это может быть причиной того, что Javascript показывает эта ошибка?

+7

в своем коде я не могу увидеть определение для 'spread' так эта ошибка очевидна для меня , – Mritunjay

+0

@Mritunjay "использовал библиотеку spreadJS" – Hacketo

+0

Ну, правильно ли загрузилась библиотека? – deceze

ответ

1

Скорее всего, вы видите проблемы синхронизации, и код внутри initExcel выполняется перед spread загружен и создан. Нет абсолютно никакой гарантии, что spread будет доступен до того, как он вам понадобится; все зависит от удачи, скорости сети и кеширования.

Определение кода, который имеет зависимости внутри в require блок, который обеспечивает его зависимости будут выполнены:

require(["jquery", "spreadjs"], function() { 
     $("#ss").wijspread(); 
     var spread = $("#ss").wijspread("spread"); 

     function initExcel(){ ... } 
}); 
+0

Спасибо за ответ. Это действительно помогает, и я узнал что-то новое. Если я определяю свой код внутри, то он работает нормально, но только тогда, когда я не включаю объявление функции (initExcel). Если я это сделаю, я получаю сообщение об ошибке undefined function. – user1919

+1

Ну, вероятно, какой-то другой код зависит от * глобальной * существования этой функции. Это становится немного шире, так как это требует от нас знать все ваше приложение и что от него зависит. Вам просто нужно написать свое приложение таким образом, чтобы его можно было лениво загружать с помощью 'require', не используя каких-либо неявных глобальных зависимостей. – deceze

0

Кажется, что spread еще не был объявлен. В соответствии с SpreadJS Documentation вам не хватает вызова библиотеки распространения JS, где определяется спред. Таким образом, вы должны просто нужно добавить:

$("#yourDOMelementID").wijspread(); 
var spread = $("#yourDOMelementID").wijspread("spread"); 
+0

Ofcource Я делаю это. Проверьте отредактированный вопрос. – user1919

Смежные вопросы