우리는 blueimp-fileupload를 사용하는 angular 명령을 작성했습니다. requireJs 옵티 마이저를 사용하지 않는 한 코드는 정상적으로 작동합니다. 상태 변경 후 삭제의 스택이 다른requireJS 옵티 마이저 이후의 각도 삭제
Error: cannot call methods on fileupload prior to initialization; attempted to call method 'destroy'
requireJs 후 : 우리가 requireJs 최적화를 실행 한 후, 우리는 다음과 같은 오류가 발생합니다.
Wihtout RequireJs 한 번만이 함수를 호출
jQuery.cleanData = function(elems) {
var events;
for (var i = 0, elem; (elem = elems[i]) != null; i++) {
events = jQuery._data(elem, "events");
if (events && events.$destroy) {
jQuery(elem).triggerHandler('$destroy');
}
}
originalCleanData(elems);
};
그러나 RequireJs 최적화 후에는 함수 cleanData에게 한 번 jquery.js 3 회 (하지만 다른 구현, JQuery와 - ui.js 및 jQuery를 호출 . -UI-사용자 정의
requireJs 최적화로 그것은 (thefirst가 두 번 호출하고, 한 번에 두 번째입니다)이이 함수를 호출 :
$.cleanData = function(elems) {
for (var i = 0, elem; (elem = elems[i]) != null ; i++) {
try {
$(elem).triggerHandler("remove");
// http://bugs.jquery.com/ticket/8235
} catch (e) {}
}
_cleanData(elems);
};
jQuery.cleanData = function(elems) {
var events;
for (var i = 0, elem; (elem = elems[i]) != null; i++) {
events = jQuery._data(elem, "events");
if (events && events.$destroy) {
jQuery(elem).triggerHandler('$destroy');
}
}
originalCleanData(elems);
};
내가 두 가지를 제거하는 경우 jQuery.cleanData의 구현은 requireJs 이후에 작동하지만 해결책은 아닙니다. 문제는 각도의 상태가 변경된 후에 발생합니다. 예외로 인해 실행이 완료되지 않고 엉망입니다.
define('misc/directives/fileUpload', ['../app'], function(app) {
return app.directive('fileUpload', function() {
return {
restrict: 'A',
template: '<input type="file" name="files[]">',
scope: {
onAdd: '=onAdd',
options: '=options'
},
link: function($scope, $element, $attrs) {
if ($attrs.multiple != null) {
$element.find('input').attr('multiple', 'multiple');
}
return $element.fileupload(angular.extend({
autoUpload: false
}, $scope.options)).on('fileuploadprocessdone', function(e, data) {
return $scope.$apply($scope.onAdd(data.files));
}).on('$destroy', function() {
return $element.fileupload('destroy');
});
}
};
}).directive('fileUploadPreview', function() {
return {
restrict: 'A',
scope: {
uploadFile: '=uploadFile'
},
link: function($scope, $element, $attrs) {
return $scope.$watch('uploadFile', function(file) {
$element.empty();
if (file != null ? file.preview : void 0) {
return $element.append(file.preview);
}
});
}
};
});
});
어떻게이 문제를 일으킬 수 있으며 우리는 그것을 해결하기 위해 무엇을 할 수 : 여기
는 각도 지침의 JS입니까? return $ element.fileupload ('destroy') 호출입니다. 필요한? cleanData는 내부 jquery 메소드 인 것 같습니다. 여기서는 그들이 수행하는 작업 또는 여기에있는 작업을 중계해야합니다. see this question. 어떤 아이디어?
안부 피터.