У меня есть рабочая версия HTML5 drag & drop для загрузки файлов.Я редактировал код JS для поддержки нескольких загрузок файлов на одной странице.Я столкнулся с проблемой, пытаясь получить доступ к свойствам «экземпляра» в методах, которые зарегистрированы как события.
Проблема показана в приведенном ниже коде в методе this.drop .Причиной существования свойства this. $$ upload_self является доступ к данным через это свойство.Например, я не могу использовать ключевое слово this внутри функции this.drop , потому что при возникновении события this не ссылается на мой "экземпляр".
Я не уверен, что создание $$ upload_self было хорошей идеей.
Новая область экземпляров, созданная так:
var recording_upload = new upload();
recording_upload.init(recording_upload, ...);
КодDrag & drop загрузка файла:
var upload = function() {
this.$$upload_self = null;
this.$drop = null;
this.$status = null;
this.$progress = null;
this.maxNumberOfFiles = null;
...
this.init = function (self, pUrl, maxNmbOfFiles, dropArea, progress, status) {
$$upload_self = self;
$$upload_self.postUrl = pUrl;
$$upload_self.maxNumberOfFiles = maxNmbOfFiles;
$$upload_self.$drop = $("#" + dropArea);
$$upload_self.$progress = $("#" + progress);
$$upload_self.$status = $("#" + status);
$$upload_self.$drop.bind('dragenter', $$upload_self.enter);
$$upload_self.$drop.bind('dragleave', $$upload_self.leave);
$$upload_self.$drop.bind('drop', $$upload_self.drop);
};
this.enter = function (e) {
$(e.target).addClass('hover');
return false;
};
this.leave = function (e) {
$(e.target).removeClass('hover');
return false;
};
this.drop = function (e, _this) {
$(e.target).removeClass('hover');
var files = e.originalEvent.dataTransfer.files;
if (files.length > $$upload_self.maxNumberOfFiles) { // for example, here $$upload_self references always last instance...
$$upload_self.displayErrorMessage('Error: You can only drop ' + $$upload_self.maxNumberOfFiles + ' file(s) at time.');
return false;
}
...
};
...
}
Есть ли обходной путь для решения этой проблемы?Я считаю, что это, возможно, общая проблема, но не могу найти ничего, чтобы решить эту проблему.
Любая помощь очень ценится.