0

우리는 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. 어떤 아이디어?

안부 피터.

답변

0

내가 볼 수있는 한 여기에서 destroy를 호출 할 필요는 없습니다. 말했듯이 JQuery는 요소가 DOM에서 제거 되 자마자 이미 처리하고 있습니다.

각도의 시나리오가 예를 들어 부분의 변경 인 경우 그 경우 일 수 있습니다.

오류 메시지는 이전에 이미 제거 되었기 때문에 요소에 파일 업로드가 더 이상 적용되지 않았 음을 나타냅니다.

지금까지의 내 가정. 내 옆에서


두 더 의견 :

  • blueimp 이미 자체적으로이 작업을 수행 할 때 자신의 각도 지시를 만든 이유는 무엇입니까?

  • 비헤이비어가 최적화되고 최적화되지 않은 모드에서 동일해야하므로 requirejs 설정을 확실히 확인합니다.

관련 문제