2015-06-26 2 views
4

Я новичок в javascript и пытаюсь научить себя некоторым из них, глядя на код для онлайн-проектов, которые мне интересны. Я просматривал код 3D-просмотра (source). Это позволяет вам перетаскивать файлы 3D-данных, которые вы хотите просмотреть. В палитре кода (показано ниже) есть несколько вещей, которые кажутся неясными:События в аргументах функции

  1. reader.onload = function (event) ... Не уверен, что такое «событие» здесь.
  2. reader.readAsText (file); ... Не знаю, почему это делается с reader.readAsBinaryString (файл); был вызван ранее.

Большое спасибо, люди :).

function onFileDrop(evt) { 

     evt.stopPropagation(); 
     evt.preventDefault(); 

     var file = evt.dataTransfer.files[0]; 

     var splits = file.name.split('.'); 

     if (splits[splits.length - 1] == 'json') { 

      var reader = new FileReader(); 

      //reader.onerror = errorHandler; 
      //reader.onprogress = updateProgress; 
      //reader.onabort = 
      //reader.onloadstart = 
      //reader.onload = 

      reader.readAsBinaryString(file); 

      reader.onload = function (event) { 

       var meshEntityList = JSON.parse(event.target.result); 

       createScene(meshEntityList); 
      }; 

      reader.onerror = function (event) { 
       alert('Cannot read file!'); 
      }; 

      reader.readAsText(file); 
     } 
    } 

ответ

1
  1. читатель конкретизируется и дал двоичный файл для чтения. Если он преуспевает, он передает свой код выхода как «событие» и обрабатывает файл. Если он терпит неудачу, он передает код ошибки как «событие» и отображает ошибку. Слово «событие» здесь произвольно.

  2. Это просто странно из-за асинхронного характера javascript. Onload и onerror - обработчики событий. Если reader.readAsText (файл); оператор сразу последовали за reader.readAsBinaryString (файл); и они оба пришли после обработчиков событий, это может иметь больше смысла, но оно будет вести себя точно так же. Если оба эти утверждения выйдут из строя, будет срабатывать ошибка, но если либо сработает, тогда будет срабатывать onload.

+0

Спасибо за ответ :). 1. имеет смысл сейчас. Однако, как я вижу, как двоичные, так и текстовые команды чтения находятся в одном и том же операторе if, поэтому я все еще не уверен в 2. – neil

+0

Хорошо, вы правы. Я пропустил счет {}. Это выглядит странно из-за асинхронного характера javascript. Onload и onerror - обработчики событий. Если reader.readAsText (файл); оператор сразу последовали за reader.readAsBinaryString (файл); и они оба пришли после обработчиков событий, это может иметь больше смысла, но оно будет вести себя точно так же. Если оба эти утверждения выйдут из строя, будет срабатывать ошибка, но если либо сработает, тогда будет срабатывать onload. – Lance

+0

Изменение моего ответа, чтобы отразить вышеизложенное. – Lance

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