Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用捆绑don'缩小脚本;当调试被禁用时,ASP.NET MVC 3无法工作_Javascript_Asp.net Mvc 3_Slickgrid_Bundling And Minification - Fatal编程技术网

Javascript 使用捆绑don'缩小脚本;当调试被禁用时,ASP.NET MVC 3无法工作

Javascript 使用捆绑don'缩小脚本;当调试被禁用时,ASP.NET MVC 3无法工作,javascript,asp.net-mvc-3,slickgrid,bundling-and-minification,Javascript,Asp.net Mvc 3,Slickgrid,Bundling And Minification,在设置之前,我的web应用程序可以与捆绑脚本一起正常工作。如果我将调试设置为false,我的自定义脚本将缩小,然后停止工作 我可以在不同的浏览器上重现这个问题,用F12工具检查所有东西-没有错误,找出全局JavaScript变量是否有正确的名称。唯一值得注意的区别是脚本被缩小了,局部变量名和参数名也发生了变化,这不会破坏任何东西。我也有其他自定义脚本捆绑和缩小,他们的工作正常 我相信这是愚蠢的事情。我不是JavaScript方面的专家,也许我错过了一些对你来说显而易见的东西。你能告诉我如何找到问

在设置
之前,我的web应用程序可以与捆绑脚本一起正常工作。如果我将调试设置为
false
,我的自定义脚本将缩小,然后停止工作

我可以在不同的浏览器上重现这个问题,用F12工具检查所有东西-没有错误,找出全局JavaScript变量是否有正确的名称。唯一值得注意的区别是脚本被缩小了,局部变量名和参数名也发生了变化,这不会破坏任何东西。我也有其他自定义脚本捆绑和缩小,他们的工作正常

我相信这是愚蠢的事情。我不是JavaScript方面的专家,也许我错过了一些对你来说显而易见的东西。你能告诉我如何找到问题的原因吗

问候,,
Ryszard

在depper调试后,a在
compileFilter
函数中的
slick.dataview.js
脚本中找到了错误根源。我在页面上使用,并在
Slick.Data.DataView
对象中设置过滤器
compileFilter
函数对提供的筛选函数执行一些硬编码字符串替换,当筛选函数绑定并在发布代码中缩小时,这些替换失败


我将过滤函数从缩小的脚本中移出。这解决了问题。

您已经发现问题区域是
compileFilter
,但您的问题和这篇文章帮助我找到了根本原因:

我的猜测:Slick Grid的作者希望您使用
options.inlineFilters=false
来解决这个问题

我想了解为什么只有在使用ASP.NET捆绑时才会出现此问题,并发现:

使用ASP.NET捆绑和缩小时,
返回真
返回假
将替换为
返回!0和
返回!分别为1

(即使调用
Bundle.Transforms.Clear()
,也会发生这种情况)

Slick Grid的
compileFilter
compileFilterWithCaching
函数尝试使用正则表达式在循环构造内部重写过滤函数,并将
return
语句更改为
continue
语句

您从捆绑中删除筛选函数的解决方案对我也很有效,但我不喜欢使用捆绑时出现异常,因此我改为修改了slick.dataview.js(v2.2)以处理ASP.NET捆绑的替换:

我将这两行添加到
compileFilter
compileFilterWithCaching

.replace(/return!1\s*([;}]|$)/gi, "{ continue _coreloop; }$1") // hack: .net bundling uses !1 for false
.replace(/return!0\s*([;}]|$)/gi, "{ _retval[_idx++] = $item$; continue _coreloop; }$1") // hack: .net bundling uses !0 for true
所以

  var filterBody = filterInfo.body
      .replace(/return false\s*([;}]|$)/gi, "{ continue _coreloop; }$1")
      .replace(/return true\s*([;}]|$)/gi, "{ _retval[_idx++] = $item$; continue _coreloop; }$1")
      .replace(/return ([^;}]+?)\s*([;}]|$)/gi,
      "{ if ($1) { _retval[_idx++] = $item$; }; continue _coreloop; }$2");
变成

  var filterBody = filterInfo.body
      .replace(/return false\s*([;}]|$)/gi, "{ continue _coreloop; }$1")
      .replace(/return true\s*([;}]|$)/gi, "{ _retval[_idx++] = $item$; continue _coreloop; }$1")
      .replace(/return!1\s*([;}]|$)/gi, "{ continue _coreloop; }$1") // hack: .net bundling uses !1 for false
      .replace(/return!0\s*([;}]|$)/gi, "{ _retval[_idx++] = $item$; continue _coreloop; }$1") // hack: .net bundling uses !0 for true
      .replace(/return ([^;}]+?)\s*([;}]|$)/gi,
      "{ if ($1) { _retval[_idx++] = $item$; }; continue _coreloop; }$2");
现在我可以继续使用ASP.NETB&M捆绑所有脚本,SlickGrid很高兴

更新:compileFilterWithCaching实际上有点不同,因为缓存添加步骤不同。对
函数compileFilterWithCaching()
的更正更新为:

  var filterBody = filterInfo.body
      .replace(/return false\s*([;}]|$)/gi, "{ continue _coreloop; }$1")
      .replace(/return true\s*([;}]|$)/gi, "{ _cache[_i] = true;_retval[_idx++] = $item$; continue _coreloop; }$1")
      .replace(/return!1\s*([;}]|$)/gi, "{ continue _coreloop; }$1") // hack: .net bundling uses !1 for false
      .replace(/return!0\s*([;}]|$)/gi, "{ _cache[_i] = true;_retval[_idx++] = $item$; continue _coreloop; }$1") // hack: .net bundling uses !0 for true
      .replace(/return ([^;}]+?)\s*([;}]|$)/gi,
      "{ if ((_cache[_i] = $1)) { _retval[_idx++] = $item$; }; continue _coreloop; }$2");

我正在考虑在GitHub上进行此更改的请求,但我可能会先对其进行一些修改,以添加一个选项,用于是否处理ASP.NET捆绑。。。待定。与此同时,我将此问题发布到GitHub页面:

您知道,我也在缩小我的代码(包括SlickGrid),我没有任何问题。我将ASP.MVC与
BundleTable.EnableOptimizations=true一起使用并且运行它没有问题,不过值得知道的是,我使用了几个月前的SlickGrid,除此之外,其余的都没有变化。我使用的是版本2.2.20140120的SlickGrid。一般来说,捆扎和缩小效果良好。该问题仅在一种特殊情况下出现,即设置过滤功能时(例如
dataView.setFilter(filter)
)。在SlickGrid实现中针对filter函数应用了一些优化。错误的发生还取决于过滤器功能的实现。正如我所写的,我已经解决了这个问题,不允许过滤函数被缩小。我没有那么复杂:)设置你的答案被接受。干得好!