WedX - журнал о программировании и компьютерных науках

Получение ошибки: аргумент Grid не является ошибкой объекта Grid в Angular ui.grid (ng-grid) после минимизации

Я получаю Error: Grid argument is not a Grid object только в prod (он работает в dev) после минификации javascript.

Я углубился в код ui.grid и сначала подумал, что это ошибка, но, поскольку никто не жаловался, я подумал, что делаю что-то не так.

Причина, по которой я думаю, что это ошибка, вызванная минификацией:

Ошибка возникает здесь, где n в dev является функцией типа «Сетка», но после минимизации она имеет тип «h».

if ("Grid" !== t.type(n))
    throw new Error("Grid argument is not a Grid object");

t.type получает тип функции, используя Function.prototype.toString. Имя типа было изменено во время минификации и не будет равно «Сетка», как того требует приведенное выше условие.

h.type = function(e) {
    var t = Function.prototype.toString.call(e.constructor);
    return t.match(/function (.*?)\(/)[1]

Я использую Rails 4, последнюю версию angular и ui.grid.

Хотя я думаю, что это не имеет значения, вот мой код:

Вид:

<div ng-controller="SummonersCtrl">

  <p>
    <strong>Name:</strong>
    <span>{{summoner.name}}</span>
  </p>

  <p>
    <strong>Region:</strong>
    <span>{{summoner.region}}</span>
  </p>

   <div id="rune-statistics">
    <h2>Runepage Usage</h2>
    <p>Stats of {{summoner.sumOfGames()}} games.</p>
    <div ui-grid="gridOptions" class="stats-grid"></div>
  </div>

</div>

Ctrl:

runestats = angular.module('runestats')

    summonersCtrl = runestats.controller 'SummonersCtrl'
    , ['Summoner', 'backendApi', '$rootScope', '$scope', '$http', '$log'
    , (Summoner, backendApi, $rootScope, $scope, $http, $log) ->
      $scope.summoners = []
      $scope.gridOptions =
        data: 'summoner.total_runestats'

      backendApi.getSummoners().success (data) ->
        $scope.summoners = data

      $rootScope.$on 'summonerSearched', (event, name, region) ->
        backendApi.getSummoner(name, region).success (data) ->
          $scope.summoner = new Summoner(data)
          $rootScope.$broadcast('summonerFound', name, region)
    ]

Это баг, или я что-то не так делаю?


  • Он также считает, что это действительно ошибка в последней версии 3.x. Но он еще не готов к производству, поэтому, наверное, никто на него не жалуется. 16.08.2014
  • Имя типа было изменено во время минификации и не будет равно Grid, как того требует приведенное выше условие Любопытно, что это за тип до и после минификация? 16.08.2014
  • t.type(n) равно Grid до минимизации и равно после минимизации. 17.08.2014

Ответы:


1

Этот ответ может зависеть от того, что вы используете для минимизации, но многие инструменты имеют настройку под названием «mangle», которая объясняет изменение имени типа во время минимизации.

where n in dev is a function of type 'Grid', but after being minified its of type 'h'

См. ответ здесь о том, как некоторые инструменты ( этот конкретный связанный пример использует Grunt), которые также минимизируют по умолчанию код mangle для экономии дополнительных байтов. Поэтому выключите mangle, и n останется функцией типа Grid, а не будет изменено, чтобы иметь тип h. Как снова отключить mangle, будет зависеть от инструмента, который вы используете для минимизации.

Конечно, в качестве временного/последнего средства, если вы не можете отключить функцию искажения, другой вариант — пропустить минимизацию этого файла. Если вы вручную переименуете файл, чтобы он заканчивался на -min.js или .min.js, прежде чем вы минимизируете свой проект, этот файл следует пропустить, поскольку предполагается, что он уже минимизирован.

17.02.2015
Новые материалы

Как создать диаграмму градиентной кисти с помощью D3.js
Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


Для любых предложений по сайту: [email protected]