Утилиты stringTrim Knockout не работают при сборке

Когда я связываю свои js-файлы с нокаутом с помощью ASP.NET MVC 4 и запускаю свое приложение в режиме выпуска (debug = "false"), функции утилит для нокаута не работают.

Я пытаюсь использовать:

if (ko.utils.stringTrim(searchTerms) == "")
       return;

Но я получаю сообщение об ошибке: у объекта нет метода stringTrim.

Моя комплектация выглядит так:

bundles.Add(new ScriptBundle("~/bundles/scripts").Include(
    "~/Scripts/jquery-{version}.js"
    ));

bundles.Add(new ScriptBundle("~/bundles/ko").Include(
    "~/Scripts/knockout-2.3.0.js",
    "~/Scripts/knockout.mapping-latest.js"
    ));

Я натягиваю пучки вот так:

@Scripts.Render("~/bundles/scripts")
@Scripts.Render("~/bundles/ko")
@RenderSection("scripts", required: false)

Есть идеи?


person Felix    schedule 20.07.2013    source источник
comment
что вы получите, если наберете ko в консоли Chrome? ты уверен, что у тебя нокаут?   -  person Ali Habibzadeh    schedule 20.07.2013
comment
Да, так как моя модель просмотра и привязки работают, забыл указать это в вопросе.   -  person Felix    schedule 21.07.2013


Ответы (1)


Проблема в том, что ko.utils.stringTrim в настоящее время не идентифицируется как экспортируемый метод, поэтому, когда Knockout минифицируется с помощью Google Closure Compiler, имя этого метода минимизируется.

В выпускной сборке вы в конечном итоге используете минифицированный файл, а не отладочную версию.

Логика для stringTrim в Knockout:

    stringTrim: function (string) {
        return string === null || string === undefined ? '' :
            string.trim ?
                string.trim() :
                string.toString().replace(/^[\s\xa0]+|[\s\xa0]+$/g, '');
    }

Вы можете добавить его в свой проект.

Если вы поддерживаете только более новые браузеры (IE9+), вы можете просто использовать string.trim(), в противном случае вы потенциально можете добавить его в более старые браузеры, как описано здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim

person RP Niemeyer    schedule 20.07.2013