Конвертер jsviews/jsrender не работает с тегом {{:...}}
Я пытаюсь использовать конвертер для изменения строки в шаблоне jsrender, но я не могу заставить конвертер работать с тегом. Используя пример в документации по API JsRender. Например, используя конвертеры:
<script>
$.views.converters("upper", function(val) {
return val.toUpperCase();
});
</script>
Тогда в моем HTML {{upper:Name}}
который выдает ошибку в консоли: TypeError: val не определен, а шаблон не отображается вообще.
Тем не менее, если я применяю конвертер непосредственно к такой строке {{upper:"This should be uppercase"}}
выводит строку в верхнем регистре, как и ожидалось.
{{:Name}}
тег сам по себе работает нормально, так почему же с ним не работает конвертер?
Если это уместно, это проект ASP.NET-MVC, а данные JSON, представленные шаблоном, поступают из $.post('@Url.Action(..,..)')...
ответ. Он работает отлично, пока я не попытаюсь применить конвертер к тегу. Конвертеры не используются в этом сценарии?
1 ответ
Похоже, ваш Name
свойство не определено в некоторых случаях.
Если у вас есть Имя, которое не определено, то {{:Name}}
будет отображаться как пустая строка, ""
- но {{upper:Name}}
выдаст ошибку, т.к. undefined.toUpperCase()
не удастся.
Вы можете провести расследование, разбив брошенные ошибки (или поставив точку останова или debugger
оператор в конвертере) и видя где твой неопределенный Name
идет от.
Вы также можете предотвратить появление ошибки - и вместо этого получить информацию об ошибке - любым из следующих методов
- записывать
{{upper:Name onerror=true}}
или же{{upper:Name onerror='bad'}}
(см. https://www.jsviews.com/) записывать
$.views.converters("upper", function(val) { return val === undefined ? 'undefined' : val.toUpperCase(); });
записывать
$.views.settings.debugMode(true);
и посмотреть, что вы получите, чтобы узнать, где ваш неопределенный Name
происходит