2

在 javascript 缩小之后,我Error: Grid argument is not a Grid object只在 prod 中工作(它在 dev 中工作)。

我深入研究了 ui.grid 的代码,我最初的想法是有一个错误,但由于似乎没有人抱怨我认为我做错了什么。

我认为它是由缩小引起的错误的原因:

此处发生错误,其中 dev 中的 n 是“网格”类型的函数,但在缩小其“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>

控制:

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)
    ]

这是一个错误,还是我做错了什么?

4

1 回答 1

0

这个答案可能取决于您用于缩小的内容,但许多工具都有一个名为“mangle”的设置,它可以解释在缩小期间更改类型的名称。

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

请参阅此处有关某些工具(该特定链接示例使用 Grunt)如何在默认情况下缩小代码以节省额外字节的答案。所以关闭 mangle 并且 n 应该保留为 Grid 类型的函数,而不是被修改为 h 类型。如何再次关闭 mangle 取决于您用于缩小的工具。

当然,作为解决方法/最后的手段,如果您无法关闭 mangle 功能,另一种选择是跳过该文件的缩小。如果您在缩小项目之前手动将文件重命名为以 -min.js 或 .min.js 结尾,则应跳过该文件,因为假定它已被缩小。

于 2015-02-17T21:07:21.993 回答