2011-01-05 3 views
1

У меня есть сценарий, как показано ниже, что же это значит Javascript

 qq.UploadHandlerForm = function(o){ 
     this._options = { 
      action: '/upload', 
      onComplete: function(id, fileName, response){} 
     }; 
     qq.extend(this._options, o); 

     this._inputs = {}; 
    }; 

qq.UploadHandlerForm.prototype = { 
    add: function(fileInput){ 
     fileInput.setAttribute('name', 'qqfile'); 
     var id = 'qq-upload-handler-iframe' + qq.getUniqueId();  

     this._inputs[id] = fileInput; 

     // remove file input from DOM 
     if (fileInput.parentNode){ 
      qq.remove(fileInput); 
     } 

     return id; 
    }, 
    upload: function(id, params){       
     var input = this._inputs[id]; 

     if (!input){ 
      throw new Error('file with passed id was not added, or already uploaded or cancelled'); 
     }     

     var fileName = this.getName(id); 

     var iframe = this._createIframe(id); 
     var form = this._createForm(iframe, params); 
     form.appendChild(input); 

     var self = this; 
     this._attachLoadEvent(iframe, function(){    
      self._options.onComplete(id, fileName, self._getIframeContentJSON(iframe)); 

      delete self._inputs[id]; 
      setTimeout(function(){ 
       qq.remove(iframe); 
      }, 1); 
     }); 

     form.submit();   
     qq.remove(form);   

     return id; 
    }, 
    cancel: function(id){   
     if (id in this._inputs){ 
      delete this._inputs[id]; 
     }   

     var iframe = document.getElementById(id); 
     if (iframe){ 
      iframe.setAttribute('src', 'javascript:false;'); 

      qq.remove(iframe); 
     } 
    }, 
    getName: function(id){ 
     // get input value and remove path to normalize 
     return this._inputs[id].value.replace(/.*(\/|\\)/, ""); 
    }, 
    _attachLoadEvent: function(iframe, callback){ 
     qq.attach(iframe, 'load', function(){ 
      if (!iframe.parentNode){ 
       return; 
      } 
      if (iframe.contentDocument && 
       iframe.contentDocument.body && 
       iframe.contentDocument.body.innerHTML == "false"){ 
       return; 
      } 

      callback(); 
     }); 
    }, 
    _createIframe: function(id){ 
     var iframe = qq.toElement('<iframe src="javascript:false;" name="' + id + '" />'); 
     iframe.setAttribute('id', id); 

     iframe.style.display = 'none'; 
     document.body.appendChild(iframe); 

     return iframe; 
    }, 
    _createForm: function(iframe, params){ 
     var form = qq.toElement('<form method="post" enctype="multipart/form-data"></form>'); 
     var queryString = ''; 
     for (var key in params){ 
      queryString += "/"+ encodeURIComponent(params[key]); 
     } 

     form.setAttribute('action', this._options.action + queryString); 
     form.setAttribute('target', iframe.name); 
     form.style.display = 'none'; 
     document.body.appendChild(form); 

     return form; 
    } 
}; 

Я хочу знать, что «_» используется для, и что такое «_createIframe: функция (идентификатор) {}» называется ? И что называется «getName: function (id)»?

Во-вторых, я хочу использовать getName внутри функции _createForm: iframe, params {} ". Как мне это сделать? Я пытался что-то вроде

_createForm: function(id,iframe, params){var fn= this.getName(id)} 

но получил ошибку


EDIT: Добавление информации, которая была опубликована в качестве ответа.

Когда я

_createForm: function(iframe, params){ 
    var fname = this.getName(id); 
    } 

я получил ошибку "идентификатор не определен". Тогда я пытаюсь

_createForm: function(id, iframe, params){ 
    var fname = this.getName(id); 
    } 

я получил ошибку «this._input [...]. Значение равно нулю или не является объектом»

+1

Вы не получили удовлетворительного ответа на любые ваши вопросы? –

+0

Что это * * ошибка? –

+0

Теперь я понимаю ваш вопрос El Ronnoco, просто пометил старые ответы –

ответ

3

Я хочу знать, что «_» используется для,

_ - это только первый символ в названии.

... что такое _createIframe: function (id) {} ​​"called? И что называется «getName: function (id)»?

Это функции, которые были назначены объекту прототипа для класса UploadHandlerForm. Они будут доступны для всех экземпляров этого класса.

Во-вторых, я хочу использовать getName внутри функции _createForm: iframe, params {} ". Как мне это сделать?

Изнутри _createForm, вы бы назвали это нравится:

this.getName('some id'); 

Если вы получаете сообщение об ошибке, вы должны сказать нам, что ошибка.

+0

@runrunforest: так кажется, что вы успешно вызываете функцию 'this.getName()', когда используете параметр 'id', но это isn ' t найти «вход». Я предполагаю, что что-то не так с идентификатором 'id', который вы передаете, когда вы вызываете' _createIframe() '. Я предполагаю, что кто-то еще написал этот скрипт. Проблема с добавлением аргументов к функции, как и вы, заключается в том, что любой другой код, который вызывает эту функцию, будет ломаться. Было бы лучше, если бы вы добавили 'id' в качестве аргумента * last *. '_createForm: function (iframe, params, id) {', затем убедитесь, что вы передаете полезный 'id', когда вы его вызываете. – user113716

-1

Здесь вы ошибаетесь.

Если вы новичок в JavaScript, попробуйте сначала прочитать несколько руководств, а не просто взять первый бит сложного кода, который вы видите, и попытаться понять его. Сначала вам нужно понять основы и как все это сочетается.

Начало здесь:

http://www.w3schools.com/js/default.asp

+0

Будьте осторожны. Некоторые люди здесь помогут вам предложить вам «w3schools» в качестве начальной точки javascript. – user113716

+0

@patrick Спасибо за головы. Я знаю, что это не лучший ресурс, но для тех, кто, похоже, ничего не знает о JavaScript, это хорошая отправная точка. – xil3

0

_ только часть идентификатора переменной, это технически не значит ничего в JS, но может иметь особое значение для разработчика (например, все переменные с _ может сделать что-то конкретное)

_createIframe: function (id) {} ​​является частью объекта (одноразовые объекты создаются подобно этому {} или расширены из класса объектов JS). Они используют свойство prototype для расширения одного объекта другим объектом.

попробовать qq.UploadHandlerForm.getName (...)

0

В _ только часть имени, но с _ в начале названия является общим соглашением для «этого материал является частным, вы, вероятно, не следует возиться с ним ». В Javascript материал неявно открыт; вам действительно нужно перепрыгнуть через некоторые обручи (и потерять память), чтобы получить действительно частные переменные. Вместо того, чтобы делать это, некоторые люди придают частным вещам особое имя и надеются, что другие люди не будут гадать с ним. (Частные переменные сами по себе на самом деле являются просто конвенцией в любом случае, на большинстве языков, любой, кто действительно хочет их видеть, может сделать это намного сложнее, но так откровенно отстой.)

0

Символ подчеркивания - это просто часть идентификатора. Вероятно, используется в этом случае для представления переменных-членов/подпрограмм.

_createForm: function(iframe, params){}

..is пару имя-значение. _createForm - это имя и определение функции, являющееся значением. Таким образом, функция называется _createForm.

Я бы порекомендовал вам посмотреть серию Doug Crockford на javascript.

The Javascript programming language

Advanced Javascript