Вы уже поняли, что площадь проблема была compileFilter
, но ваш вопрос и этот пост помог мне выяснил причину: https://github.com/mleibman/SlickGrid/issues/244
Мое предположение: автор Slick сетки предпочел бы использовать options.inlineFilters = false
, чтобы получить вокруг этого.
Я хотел понять, почему этот вопрос только произошел, когда пакетирования в ASP.NET используется, и нашел это:
При использовании ASP.NET пакетирования и Минимизация return true
и return false
будет заменен return!0
и return!1
, соответственно.
(Это происходит, даже если вы звоните Bundle.Transforms.Clear()
)
compileFilter
и compileFilterWithCaching
функции Slick Попытается управляющей сеткой в радиолампе использовать регулярные выражения, чтобы переписать функцию фильтра внутри конструкции петли, и изменяет 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.NET B & M, и пятна сетки счастливы.
Обновление: compileFilterWithCaching фактически немного отличается из-за шага добавления кеша. Исправлено обновление function 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 пакетирования ... TBD. Тем временем я опубликовал эту проблему на странице GitHub: https://github.com/mleibman/SlickGrid/issues/1053
Я не был так утончен :) Принял ваш ответ. Отличная работа! –