Im работает над веб-приложением, где главная страница содержит две части: постоянный блок, который всегда отображается, и информационный блок, составленный одним из трех частичных представлений. Каждый из частичных представлений появляется в результате запроса AJAX и загружается только один раз (после этого окна переключения предоставляются jquery). Он работает хорошо, но Ive столкнулся с одной проблемой.
html-код частичных представлений содержит js-функции, которые также используются в блоке констант и в информационном блоке. Когда страница загружается, эти функции могут "видеть" друг друга, и они работают, но не могут найти объявления функций и предупредить меня об этом. Я не могу решить проблему, передав их во внешний файл js из-за синтаксиса бритвы, который можно найти в их коде.
Что я могу сделать с этим?
Спасибо.
Update:
Наконец, я решил решить проблему, отделяющую мой код js от представлений. Таким образом, новый вопрос заключался в том, как включить синтаксис бритвы в js файлы или что является приемлемой альтернативой. В популярных решениях Ive используются глобальные переменные, атрибуты данных и те, которые мне больше нравятся - библиотека RazorJS от Джона Кациотиса.
http://djsolid.net/blog/razorjs---write-razor-inside-your-javascript-files
Я надеюсь, что он будет работать стабильно и сделать Resharper счастливым.
Ура!
Update:
Спустя 3 года я вспомнил этот вопрос и решил обновить его в соответствии с моим опытом. На самом деле сейчас я бы предпочел не использовать для этого дополнительные библиотеки. Особенно, если вы не единственный член команды проекта... Гораздо лучше, если вы обеспечены во всех своих библиотеках, они поддерживаются создателем и сообществом и могут быть легко интегрированы в вашу среду IDE (например, если используется специальный синтаксис), Также все ребята из вашей команды должны знать, как это работает. Поэтому теперь я предлагаю сделать следующее:
- Удерживайте все JS в отдельных файлах. Изолируйте его как можно больше. Предоставьте ему внешний API.
- Вызовите функции API из своих представлений.
- Передайте все URL-адреса, созданные Razor, текстовые сообщения, константы в качестве параметра ресурса.
Например:
js файл:
$.api.someInitFunction = function(resources){ ... }
Вид:
<script>
$.api.someInitFunction({
urls: { myAction: '@Url.Action("MyAction", "MyController")' },
messages: { error: '@errorMessage' },
consts: { myConst: @myIntConst }
});
</script>